在package.json中指定node_modules的路径

stu*_*oid 79 node.js npm

有没有办法将应用程序中的node_modules目录移动到bowerrc文件中,像bower那样/ vendor/node_modules?我认为它可以在package.json中指定,但我似乎无法找到解决方案.非常感谢您的帮助.

xSh*_*ase 45

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

export NODE_PATH='yourdir'/node_modules
Run Code Online (Sandbox Code Playgroud)

根据文件:

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

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

1:$ HOME/.node_modules

2:$ HOME/.node_libraries

3:$ PREFIX/lib/node

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

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

资源

  • 我真的不认为这是问题的答案:他要求package.json中的一个属性为LOCAL(应用程序级别)npm-Packages放置一个路径.这个答案告诉他如何将GLOBALLY(-g)安装的包移动到另一个文件夹中. (87认同)
  • nope,它是一个环境变量,它是在系统级别设置的.所以你必须在你的终端输入它.在`process.env`中的节点应用程序中访问env变量 (3认同)
  • @IsmailIqbal抱歉,我刚才看到了您的评论。在NPM领域已经有两年了,我们在缓存,yarn甚至npm5,webpack方面有了长足的进步……我想说这些天对node_module的处理会更好。对于您而言,我只需在所有位置进行“ npm install”-因为npm缓存已安装的软件包,所以它与手动复制相同,而没有开销。 (2认同)

Cha*_*ear 23

简而言之:这是不可能的,因为它似乎永远不会得到支持(见https://github.com/npm/npm/issues/775).

使用CLI或ENV-Variables(参见当前选定的答案),.npmrc-Config-Files或npm link- 它们都有一个共同之处是有一些hacky work-arrounds :它们从来不仅仅是项目特定的,但总是某种的global解决方案.

对我来说,这些解决方案都不是真的很干净,因为你的项目的贡献者总是需要创建一些特殊的配置或者有一些特殊的知识 - 它们不能只是npm install它的工作原理.

所以:您必须将package.json放在您希望安装node_modules的同一目录中,或者将它们始终放在项目的root-dir中.

  • "如果你想以不同方式拼写"node_modules",抱歉,不能这样做.这是内置于node-core.改变这等于构建一个完全不同的包管理器." <==我猜想使用变量的好工作. (13认同)
  • 2019年的评论:看起来yarn支持覆盖modules目录。嗯,我想,yarn 是一个新的包管理器。 (4认同)

Van*_*uan 6

纱线支持此功能:

# .yarnrc file in project root
--modules-folder /node_modules
Run Code Online (Sandbox Code Playgroud)

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


Ric*_*ich 5

我不确定这是否是您要记住的问题,但是我最终遇到了这个问题,因为由于无法将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