2

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

在凉亭中,您提供.bowerrc带有directory选项的文件,请参阅docs。它的工作方式与您拥有的完全一样bower_components locally——没有额外的文件、加载程序,什么都没有——只是容器目录不同。

4

2 回答 2

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. 然而,这个解决方案在两个方面远非完美:

包.json

听起来,您真正想要做的不是安装单个软件包,而是将所有内容安装package.jsonsources/文件夹中。问题是当你这样做时,它也会在文件夹中npm install --prefix sources/查找。如果这对你有用,那就太好了。package.jsonsources/

我发现将您的项目保留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将按特定顺序查找模块:

  1. node_modules本地目录的文件夹中
  2. node_modules父目录的文件夹中,然后是其父目录等。
  3. 在路径中NODE_PATH,如果还没有找到模块

因此请注意,当前目录或任何父目录中没有任何其他node_modules文件夹提及您的模块,否则事情可能会变得非常混乱。

于 2016-09-03T11:50:40.380 回答
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 update ,您会将 local_modules/@amazon/product-module 文件放入 node_module/@amazon/product-module

于 2019-09-25T05:57:03.403 回答