Answers:
仅供参考:OS X似乎有一个损坏的文件夹,无法再为其自身和任何子文件夹发送fsevents
(watchpack
/ chokidar
/ Finder使用)。我不能确定这是发生在您身上的事情,但这对我和一位同事来说非常沮丧。
我们能够重命名损坏的父文件夹,然后立即按预期观看事件。有关更多信息,请参见此博客文章:http : //feedback.livereload.com/knowledgebase/articles/86239-os-x-fsevents-bug-may-prevent-monitoring-of-certai
从上面的链接推荐的修复程序是:
前两个对我们不起作用,没有尝试使用Spotlight建议,重新创建也没有必要。
我们可以通过打开Finder并在每个连续的父文件夹中创建文件来找到根本问题文件夹,直到立即显示该文件夹为止(因为Finder也会因该错误而被占用)。最根本的文件夹不会更新是罪魁祸首。我们只是mv
倒是它,mv
倒是回原来的名字,然后观察者工作。
不知道是什么原因导致了腐败,但是我很高兴能解决问题。
watchify
,没有一个步骤与我合作,因此我最终使用了poll arg。许多人通过了投票arg而不是watchify来进行浏览器化。我的代码如下:watchify(browserify(config.src,{}), {poll:100});
npm install
目录和重命名目录都是实现同步客户端的非常繁琐的操作。
如果您的代码没有被重新编译,请尝试增加观察者的数量(在Ubuntu中):
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
sudo sysctl -p
在小牛上不起作用。有什么新主意吗?
ModuleConcatenationPlugin
。省略ModuleConcatenationPlugin
可以继续观看。
/etc/sysctl.conf
直接更改?变化的反应。设置该键值?(如果找不到用于应用即席命令(sysctl -p
)的命令,那么只需一次重新启动,就可以了……)
sudo sysctl -a | grep max_user_watches
将以下代码添加到我的webpack配置文件中可以解决此问题,希望对您有所帮助。不要忘记忽略您的node_modules文件夹,因为那样会降低HMR(热模块更换)的性能:
watchOptions: {
poll: true,
ignored: /node_modules/
}
watch: true
也可以正常使用。轮询是由一个程序或设备连续检查其他程序或设备,以查看它们所处的状态,通常是查看它们是否仍处于连接状态或是否要通信。因此,设置poll: true
使webpack可以检查程序的状态,以查看是否进行了任何更改,或者至少查看了我认为正在发生的更改。
只是为了增加可能的解决方案:我将项目文件夹放在Dropbox文件夹中,将其移出为我解决了问题。(OS X)
文件夹区分大小写是我的问题。我对require()的代码调用具有所有小写的路径名,但是实际目录中有一个大写字母。我将所有目录重命名为小写,并且可以立即观看Webpack。
一个问题是,如果您的路径名不是绝对的,则将发生此类情况。我不小心设置resolve.root
为./
而不是,__dirname
这导致我浪费大量时间删除和重新创建像我上面的家伙一样的文件。
如果按César的指示更改fs.inotify.max_user_watches仍然不起作用,请尝试通过按文档所示创建脚本或使用带--watch --watch-poll
选项的webpack运行轮询而不是本机监视程序。
请注意,如果您在虚拟机(Vagrant / Virtualbox)中运行webpack并在主机平台上更改文件,则共享文件夹中的文件更新可能不会在Ubuntu上触发inotify。这将导致webpack无法获取更改。
就我而言,在de guest(在vi中)上编辑和保存文件确实触发了webpack。在主机上(在PhpStorm,记事本或任何其他应用程序中)进行编辑不会触发webpack,无论我做什么。
我通过使用vagrant-fsnotify解决了它。
vagrant-notify-forwarder
了更多的魔术装弹
vagrant plugin install vagrant-notify-forwarder
为我提供了永久解决方案
更新:删除整个目录并从仓库中重新克隆git解决了我的问题。
如果您使用的是Vim,则应尝试将backupcopy设置为yes,而不是默认的auto。否则,Vim有时会重命名原始文件并创建一个新文件,这将使webpack watch混乱:
https://github.com/webpack/webpack/issues/781
如果是这种情况,只需将其添加到您的vim设置中即可:
设置backupcopy = yes
解决问题的方法是在导入路径中发现一个大写错误。文件系统上的文件夹首字母为小写,导入路径为大写。一切都编译良好,所以这只是一个webpack监视包含问题。
在使用Vagrant(2.1.15)和rsync同步的VirtualBox(5.2.18)Ubuntu(18.04)VM中也存在此问题。突然之间,第一个构建运行良好,但是Webpack甚至在fs.inotify.max_user_watches=524288
设置好之后都没有考虑到更改。新增中poll: true
Webpack配置也无济于事。
只能vagrant-notify-forwarder
工作(出于某种原因,vagrant-fsnotify无效),但是在将文件保存到主机后,重建发生得太快了,我想rsync没有足够的时间来完成其任务(可能是由于数量我的Vagrantfile中同步目录的内容?)。
最后,通过增加aggregateTimeout
Webpack配置,使手表再次工作:
module.exports = {
watch: true,
watchOptions: {
aggregateTimeout: 10000
},
...
}
如果此解决方案适合您,请尝试再次降低该值,否则您将需要等待10秒钟,直到每次您点击保存都会重新开始构建。默认值为300毫秒。
对我来说,删除node_modules
并再次执行npm install或yarn来安装所有软件包可以解决问题
看来那价值:max_user_watches
在/proc/sys/fs/inotify/max_user_watches
是影响的WebPack
检查您的实际价值
$cat /proc/sys/fs/inotify/max_user_watches
16384
就我而言,16384还不够。
我尝试了不同类型的解决方案,例如:
$ echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p
但是,即使我更改了该值,当我重新启动PC时,它也会恢复为默认的16384。
创建文件:
sudo nano /etc/sysctl.d/90-override.conf
并填充:
fs.inotify.max_user_watches=200000
看来200000对我来说足够了。
创建文件并添加值后,只需重新启动PC即可。
在MacOS上,一个简单的解决方案如下:
在项目所在的同一目录中打开两个终端窗口。
在第一个终端窗口中运行:webpack --watch
在第二个终端窗口中运行:webpack-dev-server
我尝试了许多可能的解决方案,这似乎是最可靠的
webpack --watch
编译项目并将文件保存到磁盘,等同于webpack
每次保存后运行。webpack-dev-server
是一种开发工具,可编译到内存并将内容作为服务通过http提供。无论如何,您的建议都不是解决方案,因为只要编译后的文件webpack --watch
不能如广告所示那样工作,就不会将其写入磁盘
在尝试了一些解决该问题的策略后,我最终只是放弃了,但是在解决另一个问题时,我又尝试了一下,突然之间,--watch
旗帜终于开始起作用了。
老实说,我不知道是什么使它起作用的,但是在执行了以下步骤之后,它才开始起作用:
1. Install most recent gcc version
$ sudo port install gcc48
$ sudo port select --set gcc mp-gcc48
2. Install most recent clang version
$ sudo port install clang-3.6
$ sudo port select --set clang mp-clang-3.6
3. Export variables holding the patch to C and C++ compiler
$ export CC=/opt/local/bin/clang
$ export CXX=/opt/local/bin/clang++
可能已经发生了,在安装这些软件包时,某些依赖性只是增加了难题的缺失部分,谁知道...
希望这可以帮助任何苦苦挣扎的人使它正常工作。
我要添加另一个答案,因为我认为这是迄今为止最好的解决方案。我每天都在使用它,它震撼了!只需安装此库:
https://github.com/gajus/write-file-webpack-plugin
说明:强制webpack-dev-server程序将分发包文件写入文件系统。
如何安装 :
npm install write-file-webpack-plugin --save-dev
如果您的项目突然发生这种情况,则可以解决此问题。
也许以某种方式跟踪您的项目的文件更改了webpack所查找的文件,但已损坏。您可以按照以下简单步骤再次创建它们。
问题出在.js和.ts文件之间。为什么呢
在项目构建中,Visual Studio将打字稿文件编译为.js和.js.map。这完全没有必要,因为webpack也可以处理打字稿文件(使用awesome-typescript-loader)。在Visual Studio Code中或禁用compileOnSave时编辑componet .tsx文件时中选项时,不会重新编译已编辑的ts文件,并且我的Webpack正在处理不正确的.js文件。
解决方案是在项目构建中禁用在Visual Studio中编译打字稿文件。加
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
在.csproj的PropertyGroup中。