- webpack概述
- 入口起点(Entry Points)
- 输出(Output)
- 模块(Mode)
- 加载器(Loaders)
- 插件(Plugins)
- 配置(Configuration)
- 模块(Modules)
- 模块解析(Module Resolution)
- 依赖图表(Dependency Graph)
- 文件清单(Manifest)
- 构建目标(Targets)
- 模块热替换(Hot Module Replacement)
- 第二部分:配置
- 使用不同语言进行配置(Configuration Languages)
- 多种配置类型
- 入口和上下文(Entry and Context)
- 输出(Output)
- 模块(Module)
- 解析(Resolve)
- 插件(Plugins)
- 开发中 Server(DevServer)
- 开发工具(Devtool)
- 构建目标(Targets)
- Watch 和 WatchOptions
- 外部扩展(Externals)
- 性能(Performance)
- Node
- 统计(Stats)
- 其它选项(Other Options)
- 第三部分:API
- 命令行接口(CLI)
- 包含统计数据的文件(stats data)
- Node.js API
- 模块热替换(Hot Module Replacement)
- 加载器 API
- 模块方法(module methods)
- 模块变量(module variables)
- Plugin API
- compiler 钩子
- compilation 钩子
- resolver
- parser
- 第四部分:指南
- 安装
- 起步
- 管理资源
- 管理输出
- 开发
- 模块热替换
- Tree shaking
- 生产环境构建
- 代码拆分(Code Splitting)
- 懒加载(Lazy Loading)
- 缓存(Caching)
- 创建库 (Library)
- Shimming
- 渐进式网络应用程序
- TypeScript
- 迁移到新版本
- 使用环境变量
- 构建性能
- 内容安全策略
- 开发 - Vagrant
- 管理依赖
- Public Path(公共路径)
- 集成(Integrations)
- 第五部分:加载器
- babel-loader
- yaml-frontmatter-loader
- cache-loader
- coffee-loader
- coffee-redux-loader
- coverjs-loader
- css-loader
- exports-loader
- expose-loader
- extract-loader
- file-loader
- gzip-loader
- html-loader
- i18n-loader
- imports-loader
- istanbul-instrumenter-loader
- jshint-loader
- json-loader
- json5-loader
- less-loader
- bundle-loader
- multi-loader
- node-loader
- null-loader
- polymer-webpack-loader
- postcss-loader
- raw-loader
- react-proxy-loader
- restyle-loader
- sass-loader
- script-loader
- source-map-loader
- style-loader
- svg-inline-loader
- thread-loader
- transform-loader
- url-loader
- val-loader
- worker-loader
- mocha-loader
- 第六部分:插件
- AggressiveSplittingPlugin
- ZopfliWebpackPlugin
- BannerPlugin
- ClosureWebpackPlugin
- CommonsChunkPlugin
- ComponentWebpackPlugin
- CompressionWebpackPlugin
- ContextReplacementPlugin
- CopyWebpackPlugin
- DefinePlugin
- DllPlugin
- EnvironmentPlugin
- EvalSourceMapDevToolPlugin
- ExtractTextWebpackPlugin
- HashedModuleIdsPlugin
- HotModuleReplacementPlugin
- HtmlWebpackPlugin
- BabelMinifyWebpackPlugin
- IgnorePlugin
- LoaderOptionsPlugin
- MinChunkSizePlugin
- ModuleConcatenationPlugin
- NamedModulesPlugin
- NormalModuleReplacementPlugin
- NpmInstallWebpackPlugin
- PrefetchPlugin
- ProfilingPlugin
- ProvidePlugin
- SourceMapDevToolPlugin
- SplitChunksPlugin
- UglifyjsWebpackPlugin
- WatchIgnorePlugin
- I18nWebpackPlugin
Watch 和 WatchOptions
webpack 可以监听文件变化,当它们修改后会重新编译。这个页面介绍了如何启用这个功能,以及当 watch 无法正常运行的时候你可以做的一些调整。
watch
boolean
启用 Watch 模式。这意味着在初始构建之后,webpack 将继续监听任何已解析文件的更改。Watch 模式默认关闭。
watch: false
T> webpack-dev-server 和 webpack-dev-middleware 里 Watch 模式默认开启。
watchOptions
object
一组用来定制 Watch 模式的选项:
watchOptions: {
aggregateTimeout: 300,
poll: 1000
}
watchOptions.aggregateTimeout
number
当第一个文件更改,会在重新构建前增加延迟。这个选项允许 webpack 将这段时间内进行的任何其他更改都聚合到一次重新构建里。以毫秒为单位:
aggregateTimeout: 300 // 默认值
watchOptions.ignored
对于某些系统,监听大量文件系统会导致大量的 CPU 或内存占用。这个选项可以排除一些巨大的文件夹,例如 node_modules
:
ignored: /node_modules/
也可以使用 anymatch 模式:
ignored: "files/**/*.js"
watchOptions.poll
boolean
number
通过传递 true
开启 polling,或者指定毫秒为单位进行轮询。
poll: 1000 // 每秒检查一次变动
T> 如果监听没生效,试试这个选项吧。Watch 在 NFS 和 VirtualBox 机器上不适用。
info-verbosity
string
: none
info
verbose
控制生命周期消息的详细程度,例如 Started watching files(开始监听文件)...
日志。将 info-verbosity
设置为 verbose
,还会额外在增量构建的开始和结束时,向控制台发送消息。info-verbosity
默认设置为 info
。
webpack --watch --info-verbosity verbose
故障排除
如果您遇到任何问题,请查看以下注意事项。对于 webpack 为何会忽略文件修改,这里有多种原因。
发现修改,但并未做处理
在运行 webpack 时,通过使用 --progress 标志,来验证文件修改后,是否没有通知 webpack。如果进度显示保存,但没有输出文件,则可能是配置问题,而不是文件监视问题。
webpack --watch --progress
没有足够的文件观察者
确认系统中有足够多的文件观察者。如果这个值太低,webpack 中的文件观察者将无法识别修改:
cat /proc/sys/fs/inotify/max_user_watches
Arch 用户,请将 fs.inotify.max_user_watches=524288
添加到 /etc/sysctl.d/99-sysctl.conf
中,然后执行 sysctl --system
。 Ubuntu 用户(可能还有其他用户)请执行:echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
。
MacOS fsevents Bug
在 MacOS 中,某些情况下文件夹可能会损坏。请参阅这篇文章。
Windows Paths
因为 webpack 期望获得多个配置选项的绝对路径(如 __dirname + "/app/folder"
),所以 Windows 的路径分隔符 \
可能会破坏某些功能。
使用正确的分隔符。即 path.resolve(__dirname, "app/folder")
或 path.join(__dirname, "app", "folder")
。
Vim
在某些机器上,Vim 预先将 backupcopy 选项 设置为 auto
。这可能会导致系统的文件监视机制出现问题。将此选项设置为 yes
可以确保创建文件的副本,并在保存时覆盖原始文件。
:set backupcopy=yes
在 WebStorm 中保存
使用 JetBrains WebStorm IDE 时,你可能会发现保存修改过的文件,并不会按照预期触发观察者。尝试在设置中禁用安全写入(safe write)
选项,该选项确定在原文件被覆盖之前,文件是否先保存到临时位置:取消选中 File > Settings... > System Settings > Use "safe write" (save changes to a temporary file first)
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论