Mac上的节点模块无故丢失

时间:2019-06-10 06:45:50

标签: macos npm

我的package.json文件中有十几个依赖项,而那些依赖项还包含许多其他依赖项。我们都知道依赖关系树可以快速增长。

我多次运行npm run dev,但没有给我一个错误。但是,它最近开始抱怨缺少模块。那时依赖树中没有增量,也没有更改任何可能需要缺少模块的代码。

清除node_modules文件夹并重新进行npm install总是可以解决此问题,但我不知道根本原因是什么或如何解决。在过去,这是我偶尔遇到的一个问题。但是,它开始更频繁地出现。

2 个答案:

答案 0 :(得分:0)

这可能是硬盘驱动器的硬件问题。如果您的驱动器太旧,则可能损坏,删除文件或将文件发送到已知状态。

但是,如果您发现问题与硬件无关。类似问题here的github问题。但是,将npm 更新为5.7.1似乎可以解决该问题。

阅读this guide以更新npm。如果不能,请使用npm install --save

答案 1 :(得分:0)

这听起来像一个奇怪的问题,更多的是关于数据丢失的问题,而不是npm。

要进行调查,建议您观察文件夹树中的更改,并在删除内容时显示警报。然后至少可以在发生这种情况时缩小范围。也许不是在开发过程中,而是日常工作中需要使用的清理工具。

  1. 尝试使用内置工具:从Spotlight启动“文件夹操作设置”或右键单击您的packages文件夹,然后选择服务>文件夹操作设置... 来配置脚本以在Mac中的文件夹更改上运行。如果未触发子目录更改,恐怕您需要...

  2. 使用fswatch之类的命令行工具:

    $ brew install fswatch
    $ fswatch --recursive --timestamp /path/to/modules
    

您可以按事件类型进行过滤(请参见fswatch docs),但请注意,您同时需要--event Removed --event Renamed,因为使用Finder回收站是确实是重命名/移动命令。

另请参阅Is there a command like "watch" or "inotifywait" on the Mac?

,了解如何在Mac上使用fswatch和其他CLI工具。

对于fswatch,没有自定义脚本的变更触发器。您宁愿创建一个运行直到被杀死的shell脚本,并配置fswatch在1个事件发生后退出以立即处理输出:

$WATCHED_PATH="/path/to/node/modules"
while [[ true ]]
do
    path=`fswatch --recursive --one-event --event Removed --event Renamed "$WATCHED_PATH"`
    applescript="tell app \"System Events\" to display dialog \"Removed $path\""
    osascript -e $applescript
done