Як встановити залежності package.json у поточному каталозі за допомогою npm


202

У мене є веб-додаток: fooapp . У мене є package.jsonкорінь. Я хочу встановити всі залежності в конкретній node_modules directory. Як це зробити?

Що я хочу

Скажімо, у мене дві widgetзалежності. Я хочу закінчити структуру каталогу на зразок цієї:

node_modules/
  widgetA
  widgetB
fooapp/
  package.js
  lib
  ..

Що я отримую

коли я біжу, npm install fooapp/ я отримую це:

node_modules/
  fooapp/
    node_modules/
      widgetA
      widgetB
    package.js
    lib/
    ..
fooapp/
  package.js
  lib/
  ..

npm робить копію каталогу мого додатка у dir-файлі node_modules та встановлює пакети всередині іншого каталогу node_modules.

Я розумію, що це має сенс для встановлення пакета. Але я не використовую require()веб-додаток у чомусь іншому, запускаю його безпосередньо. Я шукаю простий спосіб встановити свої залежності в певний каталог node_modules.

Відповіді:


389

Запуск:

npm install

зсередини вашого каталогу додатків (тобто, де розміщений package.json) встановить залежності для вашої програми, а не встановить її як модуль, як описано тут . Вони будуть розміщені у ./node_modules відносно вашого файла package.json (це насправді трохи складніше, ніж це, тому перевірте тут документи npm ).

Якщо ви хочете, ви можете перемістити дір node_modules до батьківського dir програми, оскільки механізм "вимагати" вузла це розуміє. Однак, якщо ви хочете оновити залежності свого додатка встановленням / оновленням, npm не побачить переміщені 'node_modules', а натомість створить новий dir, знову ж таки щодо package.json.

Щоб цього не допустити, просто створіть символьне посилання на переміщені node_modules з вашого програми програми:

ln -s ../node_modules node_modules

Фантастичний! Я спробую це і відзначу цю відповідь прийнятою, якщо вона працює.
Даніель Бердслі

9
Незважаючи на те що це робочий розчин, я дізнався , що npm linkбільш зручно в таких ситуаціях , коли вам потрібно захопити модулі з іншої директорії (див stackoverflow.com/a/14387210/820520 )
Мелекес

14

У моєму випадку мені потрібно зробити

sudo npm install  

мій проект знаходиться всередині / var / www, тому мені також потрібно встановити належні дозволи.


15
sudo може не знадобитися для встановлення npm.
Аллен Ку

2
Залежно від користувача, якому потрібно виконати файл js та встановлені залежності, можна запустити sudo -u [username] npm install. Краще просто, npm installа chownкаталог node_modules рекурсивно після факту.
TheLonelyGhost

5
ніколи не запускайте npm з sudo, якщо ви не використовуєте -g- і навіть тоді є кращі способи впоратися з цим.
tkone

1
Дякую за вашу відповідь, але чому це? ти можеш пояснити? Я маю на увазі, що робити, якщо у мене є проект, в якому я хочу або потрібно зберігати папку з дозволами root і встановлювати залежності без -g там? можливо, є вагома причина, але я кілька разів робив встановлення sudo npm (без -g) і ніколи не виникав проблем. Ура!
aesede

1
@RredCat Я погоджуюся з правильним способом виконання подібних матеріалів, але через деякий час я помітив, що ця дискусія переміщується до Ubuntu, здається, існує проблема в тому, як вона управляє деякими дозволами та папками, тобто змушує користувачів використовувати sudo npm. Знову лише в Ubuntu.
aesede

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.