繁体   English   中英

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

[英]node.js / npm - override local default modules directory (node_modules)

假设我不想将我的本地(每个项目)软件包安装在node_modules中-我希望将其安装在sources/node_modules而不仅仅是node_modules 是否有可能像在凉亭中那样覆盖它?

在bower中,您可以为.bowerrc文件提供directory选项,请参阅docs 它的工作原理就好像您在bower_components locally拥有bower_components locally -没有其他文件,加载程序,什么也没有-只是容器目录有所不同。

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/ ,它还会在sources/文件夹中寻找package.json 如果这对您有用,那就太好了。

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

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

要求

如您所提到的,您可能希望脚本能够需要类似于normal的模块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文件夹,否则可能会造成混乱。

在您的根目录中创建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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM