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

Posted

技术标签:

【中文标题】如何将 npm install 安装到指定目录?【英文标题】:How to npm install to a specified directory? 【发布时间】:2013-01-06 07:55:34 【问题描述】:

运行npm install <package>时可以指定目标目录吗?

【问题讨论】:

另见:***.com/questions/14742553/… 【参考方案1】:

您可以使用--prefix 选项:

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

这些软件包随后将安装在./install/here/node_modules 中。 mkdir 是必需的,因为 npm 否则可能会选择层次结构中更高的现有 node_modules 目录。 (见npm documentation on folders。)

【讨论】:

如果您使用 --prefix 选项,您似乎必须在此备用目录中拥有 package.json 文件。有没有办法在当前目录中有 package.json 并安装到备用目录? @fractal 查看我的答案 @coundy 有没有办法指定npm install 的路径(没有包名)?我直接对此感到厌烦,但随后 npm 在prefix 中查找package.json。我的另一个目标是能够让项目根目录中的packages.json 并同时在project root/project webroot 中安装所有包。 我遇到了递归问题。有没有办法告诉它运行一次?我通过更改目录然后调用npm install 暂时解决了它,但--prefix 似乎是一个更好的解决方案,如果它没有引起递归。 这不起作用,它只会创建一个符号链接,一切仍然安装到您的源目录【参考方案2】:

从 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 documentation on folders 解析,仅当使用npm install 而没有--prefix 选项时。

【讨论】:

这似乎不起作用,我总是得到Can't install &lt;current directory&gt;: Missing package name @TiborBlenessy 假设您正在谈论第二个安装声明。请确保您的当前目录中有一个有效的 package.json 文件。如果它仍然不起作用,请告诉我你的 npm 版本。这些步骤用于使用指定的 npm 版本。而且,如果他们不再这样做,我很想深入研究并找到根本原因,也许我可以想出一个替代方案。 @RohitSharma 使用 npm 6.0.0 此方法不起作用,因为它期望 ./install/here 中的 package.json 文件 这根本行不通。它希望 json 文件位于 ./install/here 目录中,即使您将 ./ 放在最后。我对它创建到父文件夹的不必要的符号链接也没有印象。告诉npm安装路径应该在哪里,真的就这么难,还是不能顺利完成? @Tanoro 第三个命令将与 npm 6.0.0 一起使用,如答案中所述创建符号链接。我从来没有尝试过使用 npm v3.5.2 的前 2 个命令,这就是为什么我提到了我尝试过的特定版本的 npm。请随时使用其他版本的工作命令更新答案。【参考方案3】:

在documentation 中声明: 将前缀选项与全局选项一起使用

prefix 配置默认为安装节点的位置。在 大多数系统,这是 /usr/local。在 Windows 上,这是确切的 node.exe 二进制文件的位置。在 Unix 系统上,它是上一级的, 因为节点通常安装在 prefix/bin/node 而不是 prefix/node.exe

global 标志被设置时,npm 会将东西安装到这个前缀中。 如果未设置,则使用当前包的根目录,或者 当前工作目录(如果不在包中)。

(他们强调)

所以在你的根目录中你可以安装

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

它会将node_modules文件夹安装到文件夹中

<path/to/prefix_folder>/lib/node_modules

【讨论】:

你不能require 全局安装包,可以吗? @Pavlo 这有帮助吗? ***.com/questions/15636367/… 您应该将其添加到答案中。 @Pavlo 我不这么认为。这不是 OP 的答案。 @Pavlo 如果一个包是全局安装的,你需要它的方式和往常一样。所以是的,你可以要求一个全局安装的包。【参考方案4】:

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

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

start "npm" -ArgumentList "install --warn" -wo $buildFolder

【讨论】:

以上是关于如何将 npm install 安装到指定目录?的主要内容,如果未能解决你的问题,请参考以下文章

npm install 后缀

nodejs npm install全局安装和本地安装的区别

nodejs npm install全局安装和本地安装的区别

nodejs npm install全局安装和本地安装的区别

npm installnpm install --save与npm install -dev区别

NPM实用指北