NPM 全局安装仍在创建 node_modules 目录
NPM global install still creating a node_modules directory
在 Ubuntu 中,我有一个包含代码 /code
的目录,其中包含我的 packages.json
等。我的 NPM 前缀是 /usr
通过 npm prefix -g
。我正在尝试全局安装软件包,以便不在 /code
中创建 node_modules
目录,但实际上只要 node_modules
不在 /code
中,它也可以工作。
在 /code
时,我 运行 npm install -g
。我看到在我的全局前缀(例如,/usr/lib/node_modules/.staging
)下创建了一个 .staging
目录,但随后 NPM 采取了另一个步骤并开始创建一个 /code/node_modules
目录。
如果我只是 运行 npm install -g <package>
,它会正确地以 /usr/lib/node_modules/<package>
结束。但是我不想 运行 npm install -g <package>
我需要的每个包裹。
为什么 NPM 这样做,我怎样才能让它停止这样做?至少,我希望 node_modules
目录不在我的 /code
目录中(这是由于某些我无法更改的环境限制)。
全局安装的包(几乎总是)不会被您的代码使用。这不是 node
或 npm
(通常)的工作方式。没有所有程序都查看的共享全局 node_modules
。(好吧,有一点,但如果可以避免,你不想使用它。继续阅读。)有一个本地 node_modules
帮助您避免依赖地狱。全局模块适用于最终出现在 PATH
之类的 CLI 工具。
你没有解释为什么你的项目不需要本地 node_modules
,所以我会提到,如果它只是因为它以某种方式困扰你,那么请拜托请克服它.你会快乐得多。输入 npm install
并继续。
也就是说,由于遗留原因,如果没有 /code/node_modules
,您在 /code
中的代码将在 /node_modules
中查找。对于使用 require()
的 CommonJS 模块来说是这样。如果您通过 import
使用 ESM 模块,您可能需要阅读文档。
因此,如果您使用的是 CommonJS/require()
,您的目录结构可能类似于 /project-name/code
。您可以将 index.js
或任何其他代码放在 code
子目录中,而您的 package.json
可能位于 project-name
中。 运行 npm install
来自 /project-name
并且它将在那里创建一个 node_modules
目录而不是在 code
子目录中,并且您的 Node.js 文件在 code
会找到那些模块。
如果您不喜欢,那么对于其他选项,您可以查看 relevant docs。在撰写本文时,这些选项包括 NODE_PATH
环境变量、$HOME/.node_modules
、$HOME/.node_libraries
和 $PREFIX/lib/node
。然而,这一切都伴随着这个警告,如果可以的话,我恳请你遵守:
It is strongly encouraged to place dependencies in the local node_modules folder. These will be loaded faster, and more reliably.
在 Ubuntu 中,我有一个包含代码 /code
的目录,其中包含我的 packages.json
等。我的 NPM 前缀是 /usr
通过 npm prefix -g
。我正在尝试全局安装软件包,以便不在 /code
中创建 node_modules
目录,但实际上只要 node_modules
不在 /code
中,它也可以工作。
在 /code
时,我 运行 npm install -g
。我看到在我的全局前缀(例如,/usr/lib/node_modules/.staging
)下创建了一个 .staging
目录,但随后 NPM 采取了另一个步骤并开始创建一个 /code/node_modules
目录。
如果我只是 运行 npm install -g <package>
,它会正确地以 /usr/lib/node_modules/<package>
结束。但是我不想 运行 npm install -g <package>
我需要的每个包裹。
为什么 NPM 这样做,我怎样才能让它停止这样做?至少,我希望 node_modules
目录不在我的 /code
目录中(这是由于某些我无法更改的环境限制)。
全局安装的包(几乎总是)不会被您的代码使用。这不是 node
或 npm
(通常)的工作方式。没有所有程序都查看的共享全局 node_modules
。(好吧,有一点,但如果可以避免,你不想使用它。继续阅读。)有一个本地 node_modules
帮助您避免依赖地狱。全局模块适用于最终出现在 PATH
之类的 CLI 工具。
你没有解释为什么你的项目不需要本地 node_modules
,所以我会提到,如果它只是因为它以某种方式困扰你,那么请拜托请克服它.你会快乐得多。输入 npm install
并继续。
也就是说,由于遗留原因,如果没有 /code/node_modules
,您在 /code
中的代码将在 /node_modules
中查找。对于使用 require()
的 CommonJS 模块来说是这样。如果您通过 import
使用 ESM 模块,您可能需要阅读文档。
因此,如果您使用的是 CommonJS/require()
,您的目录结构可能类似于 /project-name/code
。您可以将 index.js
或任何其他代码放在 code
子目录中,而您的 package.json
可能位于 project-name
中。 运行 npm install
来自 /project-name
并且它将在那里创建一个 node_modules
目录而不是在 code
子目录中,并且您的 Node.js 文件在 code
会找到那些模块。
如果您不喜欢,那么对于其他选项,您可以查看 relevant docs。在撰写本文时,这些选项包括 NODE_PATH
环境变量、$HOME/.node_modules
、$HOME/.node_libraries
和 $PREFIX/lib/node
。然而,这一切都伴随着这个警告,如果可以的话,我恳请你遵守:
It is strongly encouraged to place dependencies in the local node_modules folder. These will be loaded faster, and more reliably.