在package.json中指定node_modules的路径


95

有没有一种方法可以将应用程序中的node_modules目录移动到/ vendor / node_modules,例如bower对bowerrc文件的处理?我以为可以在package.json中指定它,但是我似乎找不到解决方案。非常感谢您的帮助。



@blunderboy感谢您的链接。疯狂的是,没有更简单的方法可以做到这一点。那好吧。
sturoid 2014年

26
我不确定您为什么接受了显然无法回答您问题的答案。您问如何将路径设置为node_modules inpackage.json,而xShirase的答案根本没有提供实现此目的的方法。
Mark Amery

4
他可能接受了答案,因为这很显然是XY问题,而替代解决方案比“抱歉,不可能”要好。
杰克·霍尔辛格

Answers:


58

是的,您可以,只需设置NODE_PATH env变量:

export NODE_PATH='yourdir'/node_modules

根据文档:

如果将NODE_PATH环境变量设置为以冒号分隔的绝对路径列表,则节点将在这些路径中搜索模块(如果未在其他位置找到)。(注意:在Windows上,NODE_PATH用分号而不是冒号分隔。)

此外,节点将在以下位置搜索:

1:$ HOME / .node_modules

2:$ HOME / .node_libraries

3:$ PREFIX / lib / node

其中$ HOME是用户的主目录,而$ PREFIX是节点的已配置node_prefix。

这些主要是出于历史原因。强烈建议您将依赖项本地放置在node_modules文件夹中。它们将更快,更可靠地加载。

资源


1
太棒了。因此,在我要构建的每个应用程序都具有本地node_modules的情况下,我可以在项目的js文件中导出该文件吗?
固醇

3
是的,这是一个环境变量,它是在系统级别设置的。因此,您必须在终端中键入它。在process.env
xShirase

嗯听起来不错。我将不得不进一步研究。谢谢您的帮助。
固醇

112
我真的不认为这是问题的答案:他在package.json中要求一个属性来为本地(应用程序级)npm-Packages放置路径。此答案告诉他如何将GLOBALLY(-g)安装的软件包移到另一个文件夹。
David Losert

2
@IsmailIqbal对不起,我刚才看到您的评论。在NPM领域已经有两年了,我们在缓存,yarn甚至npm5,webpack方面有了长足的进步……我想说这些天对node_module的处理要好得多。对于您而言,我只需在所有位置进行“ npm安装”-因为npm缓存已安装的软件包,所以它与手动复制相同,而没有开销。
David Losert

28

简而言之:这是不可能的,并且似乎永远也不会被支持(请参阅此处https://github.com/npm/npm/issues/775)。

使用CLI或ENV-Variables(请参阅当前选择的答案)、. npmrc-Config-Files或npm link-它们都具有一些共同点:它们有很多共同点:它们不只是特定于项目的,而且总是某种的global解决方案。

对我来说,这些解决方案都不是真正干净的,因为您的项目的参与者总是需要创建一些特殊的配置或具有一些特殊的知识-他们不能只是简单npm install而有效。

因此:要么必须将package.json放在要安装node_modules的目录中,要么必须保证它们始终位于项目的根目录中。


16
“如果您想用不同的方式拼写“ node_modules”,对不起,那是无能为力的。这是内置于节点核心中的。更改该内容等同于构建一个完全不同的包管理器。” <==我猜使用变量很好。
stevedbrown

来自2019年的评论:似乎yarn支持覆盖modules目录。好吧,我想,yarn是新的包装经理。
Vanuan

10

纱线支持此功能:

# .yarnrc file in project root
--modules-folder /node_modules

但是您的经验可能会有所不同,具体取决于您使用的软件包。我不确定您是否想进入那个兔子洞。


6

我不确定这是否是您的初衷,但由于无法安装,我最终遇到了这个问题 node_modules在项目目录中安装它,因为它安装在不支持符号链接的文件系统上(VM“共享”文件夹) )。

我发现以下解决方法:

  1. 复制 package.json文件到其他文件系统上的临时文件夹
  2. npm install
  3. 将结果node_modules目录复制回项目目录,cp -r --dereference用于将符号链接扩展为副本。

我希望这对寻求移动方法的其他人有帮助 node_modules到其他文件系统。

其他选择

还有另一种解决办法,这我在GitHub的问题是@Charminbear挂发现,但是这并不工作grunt,因为它不支持NODE_PATHhttps://github.com/browserify/resolve/issues/136

假设您已经拥有/media/sf_shared并且不能在其中安装符号链接,这意味着您实际上不能从/media/sf_shared/myproject其中进行npm install, 因为某些模块使用了符号链接。

  • $ mkdir /home/dan/myproject && cd /home/dan/myproject
  • $ ln -s /media/sf_shared/myproject/package.json (您可以朝这个方向进行符号链接,只是不能在/ media / sf_shared内部创建一个)
  • $ npm install
  • $ cd /media/sf_shared/myproject
  • $ NODE_PATH=/home/dan/myproject/node_modules node index.js
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.