Невоспроизводимая установка с npm

#javascript #npm

#javascript #npm

Вопрос:

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

Более конкретно, у нас есть 2 общие библиотеки JS и куча специфичного для страницы кода (который зависит от библиотек), и мы используем npm и rollup для создания пакетов специфичного для страницы кода, который обслуживается. У библиотек есть package.json файл для их зависимостей (D3.js, jQuery и т.д.). На страницах также есть package.json файл для включения библиотек (с file:path/to/file ) и других зависимостей.

Зависимости организованы следующим образом:

 lib1/
lib2/
  requires "file:../lib1"
plugins/
  page1/
    requires "file:../../lib2"
  page2/
    requires "file:../../lib2"
  

В первой попытке мы завершили package-lock.json и написали скрипт, который в основном переходит к lib1 запуску npm install и rollup , затем делает то же самое в lib2 (поскольку это зависит от lib1 ), а затем делает то же самое для каждой страницы.

Хотя это иногда работает, мы сталкиваемся со случайными сбоями, такими как:

 npm ERR! path /path/to/lib2/node_modules/.staging/@types/estree-39f5a558
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall rename
npm ERR! enoent ENOENT: no such file or directory, rename '/path/to/lib2/node_modules/.staging/@types/estree-39f5a558' -> '/path/to/lib1/node_modules/@types/estree'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
  

Каталог /path/to/lib1/node_modules/@types/estree существует.

Иногда это приводит к сбою в lib2 , а иногда и на странице.

Удаление package-lock.json не помогло. Использование shrinkwrap тоже не помогло.

Кто-нибудь знает, что происходит не так?

Комментарии:

1. Я хотел бы увидеть инструкцию о зависимости пакета «estree» в package.json

2. estree этого нет ни в одном из моих package.json . Он устанавливается некоторыми зависимостями ( esdoc я предполагаю). Обратите внимание, что я отредактировал сообщение, поскольку оно содержало некоторый локальный путь. Что меня озадачивает, так это то, что npm пытается установить пакеты из lib1 в lib2 . Путь в lib1 существует, кстати.

3. Согласно этой ссылке , это выглядит как ошибка в npm и исправлено в версии 6.9.0. Попробуйте обновить свой npm , чтобы посмотреть, исчезнет ли pb.

4. Спасибо за ссылку (я думаю, что я зашел на некоторые из этих страниц, но я не понял решения). npm версии 6.9.0 еще нет в Fedora (нашем дистрибутиве), и ее еще нет в nodejs . Вы знаете , sudo npm install npm -g безопасно ли это ?

5. Lol, что касается безопасности, теоретически в сообществе js ничего не гарантировано : facepalm:. Но шутки в сторону, да, вы можете практически считать npm безопасным. Нужно иметь некоторую веру в менеджер пакетов de facto для одного из крупнейших сообществ.