CD's blog CD's blog
首页
  • HTMLCSS
  • JavaScript
  • Vue
  • TypeScript
  • React
  • Node
  • Webpack
  • Git
  • Nestjs
  • 小程序
  • 浏览器网络
  • 学习笔记

    • 《TypeScript 从零实现 axios》
    • Webpack笔记
  • JS/TS教程

    • 《现代JavaScript》教程
🔧工具方法
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

CD_wOw

内卷的行情,到不了的梦
首页
  • HTMLCSS
  • JavaScript
  • Vue
  • TypeScript
  • React
  • Node
  • Webpack
  • Git
  • Nestjs
  • 小程序
  • 浏览器网络
  • 学习笔记

    • 《TypeScript 从零实现 axios》
    • Webpack笔记
  • JS/TS教程

    • 《现代JavaScript》教程
🔧工具方法
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 配置

  • 指南(实例)

    • 安装
    • 起步
    • 管理资源
    • 管理输出
    • 开发
    • 模块热替换
    • tree shaking
    • 生产环境构建
    • 代码分离
    • 懒加载
    • 缓存
    • 创建 library
    • shimming
    • 渐进式网络应用程序
    • TypeScript
    • 迁移到新版本
    • 使用环境变量
    • 构建性能
    • 内容安全策略
    • 开发 - Vagrant
      • 项目配置
      • 启动服务器
      • 配合 nginx 的高级用法
      • 小结
    • 管理依赖
    • 公共路径(public path)
    • 集成(integrations)
  • 《Webpack》笔记
  • 指南(实例)
CD_wOw
2020-12-15
目录

开发 - Vagrant

如果你在开发一个更高级的项目,并且使用 Vagrant (opens new window) 来实现在虚拟机(Virtual Machine)上运行你的开发环境(development environment),那么你或许需要在虚拟机上运行 webpack。

# 项目配置

首先,确保 Vagrantfile 拥有一个固定 IP。

Vagrant.configure("2") do |config|
  config.vm.network :private_network, ip: "10.10.10.61"
end
1
2
3

接下来便是在项目中安装 webpack 和 webpack-dev-server。

npm install --save-dev webpack webpack-dev-server
1

确保已经设好配置文件 webpack.config.js。如果没有的话,下面的示例代码可以作为入门的简单配置:

module.exports = {
  context: __dirname,
  entry: "./app.js"
};
1
2
3
4

然后创建一个 index.html 文件。其中的 script 标签应当指向你的 bundle。如果 output.filename 没有在配置里设定,它的默认值便是 bundle.js。

<!doctype html>
<html>
  <head>
    <script src="/bundle.js" charset="utf-8"></script>
  </head>
  <body>
    <h2>Heey!</h2>
  </body>
</html>
1
2
3
4
5
6
7
8
9

注意,你也需要创建一个 app.js 文件。

# 启动服务器

现在我们可以启动服务器了:

webpack-dev-server --host 0.0.0.0 --public 10.10.10.61:8080 --watch-poll
1

默认配置下,服务器只允许在它的本地访问。通过更改 --host 参数,便能够在我们的 PC 上访问它。

webpack-dev-server 会在 bundle 中加上一段连接 WebSocket 的脚本,一旦你的文件被更改,服务器便会重新加载应用。--public 参数便是为了告诉脚本从哪里去找 WebSocket。服务器默认使用 8080 端口,我们也需要在这里标明。

--watch-poll 确保 webpack 能够检测到文件的更改。默认配置下,webpack 会监听文件系统触发的相关事件,但是 VirtualBox 总会有这样或那样的问题。

现在服务器应该能够通过 http://10.10.10.61:8080 访问了。如果你改动了 app.js,应用便会重新加载。

# 配合 nginx 的高级用法

为了更好的模拟类生产环境(production-like environment),还可以用 nginx 来代理 webpack-dev-server。

在你的 nginx 配置文件中,加入下面代码:

server {
  location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    error_page 502 @start-webpack-dev-server;
  }

  location @start-webpack-dev-server {
    default_type text/plain;
    return 502 "Please start the webpack-dev-server first.";
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

proxy_set_header 这几行配置很重要,因为它们关系到 WebSocket 的正确运行。

上一节中启动 webpack-dev-server 的命令可改为:

webpack-dev-server --public 10.10.10.61 --watch-poll
1

现在服务器只能通过 127.0.0.1 访问,这点关系不大,因为 ngnix 能够使得你的 PC 能访问到服务器。

# 小结

我们能够从固定 IP 访问 Vagrant box,然后由于公开了 webpack-dev-server,使浏览器可以直接访问到它。最后解决了 VirtualBox 不派发文件系统事件的常见问题,此问题会导致服务器不重新加载文件更改。

编辑 (opens new window)
#Webpack
上次更新: 2021/08/22, 01:09:59
内容安全策略
管理依赖

← 内容安全策略 管理依赖→

最近更新
01
gsap动画库学习笔记 - 持续~
06-05
02
远程组件加载方案笔记
05-03
03
小程序使用笔记
03-29
更多文章>
Theme by Vdoing | Copyright © 2020-2023 CD | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式