记webpack的HRM失效的几个解决方案

环境:macOS
配置:vue-cli自带全家桶(webpack 2.7)javascript

最近开了一个新项目,发现webpack的HRM失效了,折腾了半天搞定了,把过程作个记录。vue

1.编辑器的锅

使用自动编译代码时,可能会在保存文件时遇到一些问题。某些编辑器具备“安全写入”功能,可能会影响从新编译。
Sublime Text 3 - 在用户首选项(user preferences)中添加 atomic_save: "false"。
IntelliJ - 在首选项(preferences)中使用搜索,查找到 "safe write" 而且禁用它。
Vim - 在设置(settings)中增长 :set backupcopy=yes。
WebStorm - 在 Preferences > Appearance & Behavior > System Settings 中取消选中 Use "safe write"。
节选自:webpack中文文档java

这部分问题就是有些IDE修改文件并不会直接生效,会先放到一个临时文件中。webpack

2. macOS的问题

检测文件是否变更使用的是macOS的fsevents,经过建立fsevents的设备来实现,具体了解的很少,因此多是权限问题致使建立不了。web

sudo npm run dev 用最高权限vue-cli

具体能够看Stackoverflow上的一个回答npm

3. 主动检查文件变更

修改web-dev-middle配置(在build/dev-server.js文件)安全

var devMiddleware = require('webpack-dev-middleware')(compiler, {
  publicPath: webpackConfig.output.publicPath,
  quiet: true,
  watchOptions: {
    aggregateTimeout: 300,
    poll: 1000 // 每秒轮询检查文件变更
  }
})

最后第三个方法解决了个人问题,我的理解是文件变更的通知失效了或者没正确处理。编辑器

相关文章
相关标签/搜索