如何将npm安装到指定目录?


Answers:


325

您可以使用以下--prefix选项:

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

软件包将安装在中./install/here/node_modulesmkdir之所以需要,是因为npm否则可能会选择node_modules层次结构中较高位置的一个已经存在的目录。(请参阅文件夹上的npm文档。)


65
如果使用--prefix选项,则似乎必须在此备用目录中具有package.json文件。有没有办法在当前目录中具有package.json并安装到备用目录中?

2
@fractal看到我的答案
yunzen 2015年

10
@coundy有没有办法指定npm install(没有包名)的路径?我直接thired这一点,但随后NPM验看package.json{prefix}。我的另一个目标是能够让packages.jsonin在项目根目录中并同时将所有软件包安装在中{project root}/{project webroot}
automatix

我遇到了递归问题。有没有办法告诉它运行一次?我临时通过更改目录然后调用来解决它npm install,但是--prefix,如果它没有引起递归,那似乎是一个更好的解决方案。
adi518 '18

47

文档中指出:将prefix选项与global选项一起使用

前缀配置的默认值到安装节点的位置。在大多数系统上,这是/ usr / local。在Windows上,这是node.exe二进制文件的确切位置。在Unix系统上,它是上一级的,因为node通常安装在{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在全球范围内安装软件包,可以吗?
帕夫洛2015年


1
您应该将此添加到答案中。
2015年

6
@Pavlo我不这么认为。这不是OP的答案。
yunzen 2015年

@Pavlo如果全局安装了软件包,则您将以与以往相同的方式来使用它。因此,是的,您可能需要全局安装的软件包。
罗布·埃文斯

43

从npm 3.8.6版开始,您可以使用

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

安装在指定目录中。node_modules即使node_modules上级层次结构中已经存在目录,NPM 也会自动创建文件夹。您还可以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
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一起使用。我从未使用npm v3.5.2尝试过前两个命令,这就是为什么我提到了我尝试过的npm的特定版本的原因。也请随时使用其他版本的有效命令来更新答案。
Rohit Sharma,

0

我正在使用Powershell构建,并且在不更改当前目录的情况下无法运行npm。

最后使用start命令并仅指定工作目录:

start "npm" -ArgumentList "install --warn" -wo $buildFolder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.