我正在使用 Ubuntu 15.10 在 mac OSX 上使用 vagrant 在虚拟机上运行 webpack 服务器。
webpack 配置非常干净:
var HtmlWebpackPlugin = require('html-webpack-plugin');
var path = require('path');
var webpack = require('webpack');
var MINIFY = process.env.MINIFY === true;
var FRONTEND_ROOT = './static'
var SRC_PATCH = FRONTEND_ROOT + '/scripts';
var BUILD_PATH = './dist';
module.exports = {
entry: SRC_PATCH + '/main.js',
devtool: 'source-map',
output: {
path: BUILD_PATH,
filename: 'bundle.js'
},
resolve: {
extensions: ['', '.js', '.jsx'],
modulesDirectories: [SRC_PATCH, 'node_modules']
},
plugins: [
new HtmlWebpackPlugin({
filename: 'index.html',
template: path.resolve(FRONTEND_ROOT, 'index-template.html'),
minify: MINIFY
})
],
module: {
loaders: [
{
test: /\.jsx|js$/,
exclude: /node_modules/,
loader: 'babel-loader'
}
]
},
eslint: {
configFile: './.eslintrc'
}
};
Webpack 在 VM 上运行:
vagrant@vagrant-ubuntu-wily-64:/vagrant$ webpack-dev-server --port 8080 --devtool eval --progress --colors --hot --content-base dist
当我从 OSX 编辑文件时,它不会重新加载,但如果我从 VM 编辑相同的文件,它会重新加载。
问题是什么?我该如何解决它?
config.vm.synced_folder ".", "/vagrant", type: "rsync", rsync_auto: true, rsync_exclude: ".git/"
到我的 Vagrantfile
,并在单独的选项卡中运行
vagrant rsync-auto
。
https://stackoverflow.com/a/34937378/5114
如果添加--watch-poll
选项,它会更改 webpack 查找文件更改的方式。
webpack-dev-server --watch-poll --port 8080 --devtool eval --progress --colors --hot --content-base dist
这使得 webpack 每 N 毫秒轮询一次文件的更改。轮询在 Vagrant 共享目录中起作用,而普通方法则不起作用,因为它不查找 mtime 或其他文件系统属性,只是按时间间隔读取文件。它速度较慢并且使用更多的 cpu/内存,因此除非必要,否则不要使用轮询。
synced_folder
。因此依赖文件系统事件的功能,如 Webpack 的“热重载”(
webpack-hot-middleware
)、nodemon 的
--watch
选项等将无法工作。根本原因是,VirtualBox
决定不实现inotify
。 引用:
原因是主机和来宾可能具有不同的文件系统,并且解决方法是使用
vboxsf
必须实现通用协议以将该信息从主机转发到来宾。这必须在许多不同的主机/客户组合之间起作用。因此,将此票标记为“无法修复”,抱歉。
rsync
,如 Maxim Shepelin 的这个答案中所述。