Подтвердить что ты не робот

Как заставить npm 3 устанавливать вложенные зависимости?

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

Теперь ваши зависимости будут установлены максимально плоскими. Насколько возможно, все ваши зависимости, их зависимости и их зависимости будут установлены в вашей папке проекта node_modules без вложенности. Вы увидите только модули, вложенные под друг друга, когда два (или более) модуля имеют конфликтующие зависимости.

Так, например, если пакет A зависит от пакета B, то при npm install A вы получите эту структуру:

--- root/
 |--- node_modules/
   |--- A/
   |--- B/

вместо старой файловой структуры из версии 2 или ниже:

--- root/
 |--- node_modules/
   |--- A/
     |--- node_modules/
       |--- B/

Первая (и Im sure not the last) проблема, с которой я столкнулся, заключалась в следующем:

Пакет A не знает о поведении npm v3s и зависит от пакета B. Но A предполагает старую (v2) файловую структуру, потому что она имеет node_modules/B в своем коде вместо правильного ../node_modules/B. Теперь код из A не будет компилироваться, потому что он ищет B/ в неправильном каталоге.

Если мне не хочется навязывать разработчику исправление кода и ожидание обновления A, мне интересно, могу ли я установить параметр, который заставит npm устанавливать A в своей собственной папке node_modules, так же, как это сделал npm v2.

4b9b3361

Ответ 1

Вы пробовали --legacy-bundling для npm install?

https://docs.npmjs.com/cli/install

Аргумент -legacy-bundling приведет к тому, что npm установит пакет таким образом, чтобы версии npm до 1.4, например, входящие в node 0.8, могли установить пакет. Это устраняет все автоматическое удаление.

Ответ 2

Это то, что происходит, когда я не спал. Очевидное решение как-то ускользнуло от меня.

$ cd node_modules/A/
$ npm install
$ cd ../../

Ответ 3

Я только что столкнулся с этой проблемой и нашел альтернативу для исправления этой проблемы. Поскольку Node.js поставляется с NPM, единственный способ, о котором я мог думать, - перейти на версию Node.js 0.10, которая поставляется с более старой версией на NPM, которая будет устанавливать зависимости по-старому. Для понижения я использовал NVM и запустил nvm use 0.10.0. Вы можете переключаться между версиями npm, следуя этому трюку. Надеюсь, это поможет!