Пакеты будут установлены в ./install/here/node_modules. Это mkdirнеобходимо, так как в противном случае npm может выбрать уже существующий node_modulesкаталог выше по иерархии. (См. Документацию npm к папкам .)
Похоже, вам нужно иметь файл package.json в этом альтернативном каталоге, если вы используете опцию --prefix. Есть ли способ иметь package.json в текущем каталоге и установить в альтернативный каталог?
2
@fractal Смотрите мой ответ для этого
yunzen
10
@coundy Есть ли способ указать путь для npm install(без имени пакета)? Я сделал это напрямую, но затем npm ищет package.jsonв {prefix}. Я также хочу, чтобы у вас была возможность войти packages.jsonв корневой каталог проекта и одновременно установить все пакеты {project root}/{project webroot}.
automatix
Я столкнулся с проблемой рекурсии. Есть ли способ сказать, чтобы он запускался один раз? Я решил это временно, изменив каталог, а затем позвонив npm install, но --prefixкажется более удачным решением, если оно не вызывало рекурсию.
adi518
47
В документации сказано: используйте опцию префикса вместе с опцией global :
Префикс конфиг по умолчанию в том месте , где установлен узел. В большинстве систем это / usr / local . В Windows это точное местоположение двоичного файла node.exe. В системах Unix это на один уровень выше, поскольку узел обычно устанавливается в {prefix} / bin / node, а не в
{prefix} /node.exe .
Когда глобальный флаг установлен, npm устанавливает вещи в этот префикс. Когда он не задан, он использует корень текущего пакета или текущий рабочий каталог, если его еще нет в пакете.
(Акцент ими)
Таким образом, в вашем корневом каталоге вы можете установить с
@Pavlo Если пакет установлен глобально, он требуется вам так же, как и всегда. Так что да, вам может потребоваться пакет, который установлен глобально.
Роб Эванс
43
Начиная с версии 3.8.6 npm, вы можете использовать
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опции.
Это, кажется, не работает, я всегда получаю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
Christian Ivicevic
@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
Я использую сборку powershell и не могу запустить npm без изменения текущего каталога.
Завершается использованием команды запуска и просто указывает рабочий каталог:
Ответы:
Вы можете использовать
--prefix
опцию:Пакеты будут установлены в
./install/here/node_modules
. Этоmkdir
необходимо, так как в противном случае npm может выбрать уже существующийnode_modules
каталог выше по иерархии. (См. Документацию npm к папкам .)источник
npm install
(без имени пакета)? Я сделал это напрямую, но затем npm ищетpackage.json
в{prefix}
. Я также хочу, чтобы у вас была возможность войтиpackages.json
в корневой каталог проекта и одновременно установить все пакеты{project root}/{project webroot}
.npm install
, но--prefix
кажется более удачным решением, если оно не вызывало рекурсию.В документации сказано: используйте опцию префикса вместе с опцией global :
(Акцент ими)
Таким образом, в вашем корневом каталоге вы можете установить с
и он установит
node_modules
папку в папкуисточник
require
установить пакеты глобально, не так ли?Начиная с версии 3.8.6 npm, вы можете использовать
установить в указанный каталог. NPM автоматически создает
node_modules
папку, даже еслиnode_modules
каталог уже существует в верхней иерархии. Вы также можете иметьpackage.json
в текущем каталоге, а затем установить его в указанном каталоге, используя--prefix
параметр:Начиная с npm 6.0.0 вы можете использовать
установить package.json из текущего каталога в каталог "./install/here". На Mac я заметил одну вещь: он создает символическую ссылку на родительскую папку внутри директории node_modules. Но это все еще работает.
ПРИМЕЧАНИЕ: NPM учитывает путь, который вы указали в
--prefix
опции. Это разрешает согласно документации npm для папок , только когдаnpm install
используется без--prefix
опции.источник
Can't install <current directory>: Missing package name
package.json
файл./install/here
Я использую сборку powershell и не могу запустить npm без изменения текущего каталога.
Завершается использованием команды запуска и просто указывает рабочий каталог:
источник