Як npm встановити у вказаний каталог?


Відповіді:


325

Ви можете скористатися --prefixопцією:

mkdir -p ./install/here/node_modules
npm install --prefix ./install/here <package>

Потім пакет (и) буде встановлено в ./install/here/node_modules. mkdirНеобхідно , так НПМ може інакше вибрати вже існуючий node_modulesкаталог вище в ієрархії. (Дивіться документацію npm на папки .)


65
Здається, що ви повинні мати файл package.json у цьому альтернативному каталозі, якщо ви використовуєте параметр --prefix. Чи є спосіб мати пакет.json у поточному каталозі та встановити його в альтернативний каталог?

2
@fractal Дивіться мою відповідь на це
yunzen

10
@coundy Чи є спосіб вказати шлях npm install(без назви пакета)? Я надумав це безпосередньо, але потім npm шукає package.jsonв {prefix}. Те, що я також прагну - це вміти пускати packages.jsonв корінь проекту і одночасно встановлювати всі пакети в {project root}/{project webroot}.
automatix

Я зіткнувся з проблемою рекурсії. Чи є спосіб сказати йому запустити один раз? Я вирішив це тимчасово, змінивши каталог, а потім зателефонувавши npm install, але --prefixздається, що приємніше рішення, якщо воно не викликало рекурсії.
adi518

47

У документації зазначено: Використовуйте опцію префікса разом із глобальним параметром :

Префікс конфиг по замовчуванням в тому місці , де встановлено вузол. У більшості систем це / usr / local . У Windows це саме місце розташування двійкового файлу node.exe. У системах Unix це рівень на один рівень, оскільки вузол зазвичай встановлюється на {prefix} / bin / node, а не на {prefix} /node.exe .

Коли встановлено глобальний прапор, npm встановлює речі в цей префікс. Якщо його не встановлено, він використовує корінь поточного пакету або поточну робочу директорію, якщо вона вже не є.

(Наголос на них)

Тож у вашому кореневому каталозі ви могли б встановити

npm install --prefix <path/to/prefix_folder> -g

і він встановить node_modulesпапку в папку

<path/to/prefix_folder>/lib/node_modules

2
Ви не можете requireвстановити пакети в усьому світі, чи не так?
Павло

3
@Pavlo Чи це допомагає? stackoverflow.com/questions/15636367 / ...
yunzen

1
Ви повинні додати це до відповіді.
Павло

6
@Pavlo Я так не думаю. Це не відповідь на ОП.
юнзен

@Pavlo Якщо пакет встановлений у всьому світі, він вимагає його так само, як завжди. Так, так, ви можете вимагати пакет, встановлений у всьому світі.
Роб Еванс

43

Станом на npm версії 3.8.6 ви можете використовувати

npm install --prefix ./install/here <package>

встановити у вказаному каталозі. NPM автоматично створює node_modulesпапку навіть тоді, коли node_modulesкаталог вже існує у вищій ієрархії. Ви також можете мати package.jsonв поточному каталозі, а потім встановити його у вказаному каталозі, використовуючи --prefixопцію:

npm install --prefix ./install/here

Станом на npm 6.0.0, ви можете використовувати

npm install --prefix ./install/here ./

встановити package.json у поточному каталозі до каталогу "./install/here". Є одне, що я помітив на Mac, що він створює симпосилання на батьківську папку всередині каталогу node_modules. Але, це все одно працює.

ПРИМІТКА: NPM шанує шлях, який ви вказали через --prefixопцію. Він вирішується згідно документації на npm для папок , лише коли npm installвикористовується без цього --prefixпараметра.


1
Це, здається, не працює, я завжди отримуюCan't install <current directory>: Missing package name
Tibor Blenessy

1
@TiborBlenessy Припустимо, що ви говорите про друге твердження про встановлення. Переконайтеся, що у вашому поточному каталозі є дійсний файл package.json. Якщо це все ще не працює, повідомте мені вашу версію npm. Ці кроки використовуються для роботи із заданою версією npm. І якщо їх більше не буде, я хотів би зануритися вглиб і дійти до першопричини, і, можливо, я можу придумати альтернативу.
Рохіт Шарма

1
@RohitSharma Використання npm 6.0.0 цей метод не працює, оскільки він очікує на package.jsonфайл./install/here
Крістіан Івічевич

@ChristianIvicevic Ви можете використовувати npm install --prefix ./install/here ./, щоб встановити package.json у поточному каталозі до каталогу "./install/here". Є одне, що я помітив на Mac, що він створює симпосилання на батьківську папку всередині каталогу node_modules. Але це все ще працює з npm 6.0.0
Rohit Sharma

1
@Tanoro Третя команда працюватиме з npm 6.0.0 із створенням символьних посилань, як зазначено у відповіді. Я ніколи не пробував перші 2 команди з npm v3.5.2, тому я згадав конкретну версію npm, яку я намагався. Будь ласка, оновіть відповідь робочими командами і для інших версій.
Рохіт Шарма

0

Я використовую команду powerhell і не можу отримати npm для запуску без зміни поточного каталогу.

Закінчено за допомогою команди start та просто вказавши робочий каталог:

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