Модули узла пропадают без причины на моем Mac - PullRequest
1 голос
/ 10 июня 2019

У меня есть дюжина зависимостей в моем файле package.json, и у меня есть много других зависимостей.Мы все знаем, что дерево зависимостей может очень быстро расти.

Я запускаю npm run dev несколько раз, но оно не выдает мне ошибку.Однако недавно он начал жаловаться на отсутствующий модуль.В то время в дереве зависимостей не было дельты, и мы не меняли код, который может нуждаться в отсутствующем модуле.

Очистка папки node_modules и выполнение новой npm install всегда решает проблему, но я нене знаю, что является основной причиной или как исправить.В прошлом это была проблема, с которой я иногда сталкивался.Тем не менее, он начинает появляться чаще.

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Это звучит как странная проблема с потерей данных больше, чем npm.

Чтобы исследовать, я предлагаю вам посмотреть дерево папок на наличие изменений и отобразить предупреждение при удалении материала.Тогда, по крайней мере, вы можете сузиться, когда это произойдет.Возможно, дело даже не в разработке, а в повседневном обслуживании инструмента очистки.

  1. Попробуйте встроенный инструмент: запустите «Настройка действий с папками» (из Spotlight) или прямо- щелкните папку с вашими пакетами и выберите Службы> Настройка действий с папками ... , чтобы настроить сценарий для запуска изменений папки на вашем Mac.Если это не сработает при изменениях подкаталогов, боюсь, вам нужно ...

  2. Использовать инструмент командной строки, например fswatch :

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

Вы можете фильтровать по типам событий (см. fswatch docs ), но обратите внимание, что вам понадобятся и --event Removed и --event Renamed, потому что использование Finder Trash на самом деле является командой переименования / перемещения.

Также посмотрите, как использовать fswatch и другие инструменты CLI для Mac здесь: Есть ли такая команда, как "watch"или" inotifywait "на Mac?

В случае fswatch нет триггера при изменении для пользовательских сценариев.Вам лучше создать сценарий оболочки, который запускается до тех пор, пока вы его не уничтожите, и сконфигурировать 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
0 голосов
/ 19 июня 2019

Это может быть аппаратная проблема с жестким диском. Если ваш диск слишком старый, он может повредить, удалить или отправить файлы в подвешенном состоянии.

Однако, если вы обнаружите, что проблема не связана с оборудованием. Существует проблема github для аналогичной проблемы здесь . Однако обновление npm до 5.7.1, похоже, решило эту проблему.

Прочитайте это руководство , чтобы обновить npm. Если вы не можете, используйте npm install --save.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...