node.js / npm - 覆盖本地默认模块目录(node_modules)

时间:2016-01-18 16:00:49

标签: javascript node.js npm bower npm-install

假设我不想在node_modules中安装我的本地(每个项目)软件包 - 我想将它放在sources/node_modules而不是node_modules下。是否可以像在凉亭中那样覆盖它?

在bower中,您使用.bowerrc选项提供directory文件,请参阅docs。它就像你有bower_components locally一样 - 没有额外的文件,加载器,什么都没有 - 只是容器目录不同。

2 个答案:

答案 0 :(得分:0)

TL;博士

$ mkdir -p sources
$ ln -s package.json sources/package.json
$ npm install --prefix sources/
$ export NODE_PATH="`pwd`/sources"

解释

您可以(如@adeneo所提到的)只使用以下命令将软件包安装到任何文件夹中

$ npm install --prefix sources/ my-package

这将安装到sources/my-package。但是,这种解决方案远非两种方式:

的package.json

听起来好像不是要安装单独的软件包,而是要将package.json中的所有内容安装到sources/文件夹中。问题是,当您执行npm install --prefix sources/时,它还会在package.json文件夹中查找sources/。如果这对你有用,那就太好了。

我发现将package.json保留在项目根目录并在其他地方安装节点模块的唯一方法是将本地package.json符号链接到该目录中:

$ mkdir -p sources
$ ln -s package.json sources/package.json
$ npm install --prefix sources

需要

正如您所提到的,您可能希望您的脚本能够要求正常的模块 - require('my-module')而不是require('sources/my-module')

The NODE_PATH environment variable可以在这里提供帮助:

$ export NODE_PATH=`pwd`/sources/node_modules
$ node -e "require('my-module')"  # Success

有一个重要的警告:node将按特定顺序查找模块:

  1. 在本地目录的node_modules文件夹中
  2. 在父目录的node_modules文件夹中,然后是其父目录等。
  3. NODE_PATH的路径中,如果尚未找到模块
  4. 所以要小心,当前或任何父目录中没有任何其他node_modules文件夹提及您的模块,或者事情可能会让人感到困惑。

答案 1 :(得分:0)

在您的根目录中创建local_modules并添加package.json“ @ amazon / product-module”:“ file:local_modules / @ amazon / product-module”,

file structure
local_modules
   @amazon (folder)
     product-module (folder)
       [add your file which overrides]

现在执行npm更新,您将把local_modules / @ amazon / product-module文件放入node_module / @ amazon / product-module

相关问题