【问题标题】:Node modules go missing without any reason on my Mac节点模块在我的 Mac 上无缘无故丢失
【发布时间】:2019-10-24 13:50:12
【问题描述】:

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

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

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

【问题讨论】:

  • 你的电脑几岁了?您可以发布您的 package.json 以检查模块吗?你有坐骑吗?您使用的是什么 S.O?
  • 你也在使用 docker 吗?错误是什么?当它发生时,您需要添加一些错误示例
  • 这是运行 Mojave (10.14) 的 2015 macbook pro。它与硬件相关,我预计其他地方也会发生错误。不使用 docker - 只是简单地使用 npm install module --save 获取 npm 模块。
  • 导致问题的具体依赖是什么?您可以将您的package.json 添加到您的问题中吗?
  • 在 npm 尝试运行时,您是否有任何可能导致锁定任何文件的东西?例如:杀毒软件?带有 git 集成的 IDE?文件监视构建?

标签: macos npm


【解决方案1】:

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

为了进行调查,我建议您查看文件夹树的更改并在删除内容时显示警报。然后,至少您可以在发生这种情况时缩小范围。也许它甚至不是在开发过程中,而是一些日常服务,一个清理工具。

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

  2. 使用像fswatch这样的命令行工具:

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

您可以按事件类型进行过滤(请参阅 fswatch docs),但请注意,您将同时需要 --event Removed --event Renamed,因为使用 Finder Trash 实际上是一个重命名/移动命令.

还可以在此处查看如何使用 fswatch 和其他适用于 Mac 的 CLI 工具:Is there a command like "watch" or "inotifywait" on the Mac?

对于 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

【讨论】:

    【解决方案2】:

    这可能是硬盘驱动器的硬件问题。如果您的驱动器太旧,它可能会损坏、删除文件或将文件发送到边缘。

    但是,如果您发现问题与硬件无关。有一个类似问题here的github问题。然而,更新 npm 到 5.7.1 似乎解决了这个问题。

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

    【讨论】:

    • 我在节点 v10.10 和 npm v6.5 上。除了 npm 模块,我没有其他问题,所以我怀疑这是硬盘的问题 - 在这种情况下,它会更加随机。最后但并非最不重要的一点是:链接的答案是另一个问题 - 正如我所说,模块在重新安装时会重新出现,所以并不是它们没有正确保存到 package.json。感谢您的回复,但恐怕它对我没有帮助:(
    • 对不起那个家伙,我帮不了你... :(
    猜你喜欢
    • 2021-12-30
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多