假设我不想在 node_modules 中安装我的本地(每个项目)包 - 我想把它放在下面sources/node_modules
而不是node_modules
. 是否可以像在凉亭中那样覆盖它?
在凉亭中,您提供.bowerrc
带有directory
选项的文件,请参阅docs。它的工作方式与您拥有的完全一样bower_components locally
——没有额外的文件、加载程序,什么都没有——只是容器目录不同。
假设我不想在 node_modules 中安装我的本地(每个项目)包 - 我想把它放在下面sources/node_modules
而不是node_modules
. 是否可以像在凉亭中那样覆盖它?
在凉亭中,您提供.bowerrc
带有directory
选项的文件,请参阅docs。它的工作方式与您拥有的完全一样bower_components locally
——没有额外的文件、加载程序,什么都没有——只是容器目录不同。
$ 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
到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')
.
NODE_PATH
环境变量可以在这里提供帮助:
$ export NODE_PATH=`pwd`/sources/node_modules
$ node -e "require('my-module')" # Success
有一个重要的警告:node
将按特定顺序查找模块:
node_modules
本地目录的文件夹中node_modules
父目录的文件夹中,然后是其父目录等。NODE_PATH
,如果还没有找到模块因此请注意,当前目录或任何父目录中没有任何其他node_modules
文件夹提及您的模块,否则事情可能会变得非常混乱。
在根目录中创建 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 update ,您会将 local_modules/@amazon/product-module 文件放入 node_module/@amazon/product-module