在package.json中指定node_modules的路径

时间:2014-10-10 06:15:07

标签: node.js npm

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

4 个答案:

答案 0 :(得分:40)

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

export NODE_PATH='yourdir'/node_modules

根据文件:

  

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

     

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

     

1:$ HOME / .node_modules

     

2:$ HOME / .node_libraries

     

3:$ PREFIX / lib / node

     

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

     

这些主要是出于历史原因。 非常鼓励你   将您的依赖项本地放在node_modules文件夹中。它们将是   加载速度更快,更可靠。

Source

答案 1 :(得分:21)

简而言之:这是不可能的,因为它似乎永远不会得到支持(见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中。

答案 2 :(得分:3)

我不确定这是不是你的想法,但我最终得到了这个问题,因为我无法在我的项目目录中安装node_modules因为它安装在一个文件系统上不支持符号链接(VM"共享"文件夹)。

我找到了以下解决方法:

  1. project.json文件复制到不同文件系统上的临时文件夹
  2. 在那里运行npm install
  3. 将生成的node_modules目录复制回项目目录,使用cp -r --dereference将符号链接展开为副本。
  4. 我希望这可以帮助那些在寻找将node_modules移动到其他文件系统的方法时最终解决这个问题的人。

    其他选项

    还有另一种解决方法,I found on the github issue that @Charminbear linked to,但这不适用于grunt,因为它根据https://github.com/browserify/resolve/issues/136不支持NODE_PATH

      

    假设你有/media/sf_shared并且无法安装符号链接   在那里,这意味着你实际上无法安装npm   /media/sf_shared/myproject因为某些模块使用符号链接。

         
        
    • $ 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
    •   

答案 3 :(得分:3)

纱线支持此功能:

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

但是您的经验可能会因所使用的软件包而异。我不确定您是否想进入那个兔子洞。