Javascript node.js/npm-覆盖本地默认模块目录(node\u模块)
假设我不想在node_模块中安装我的本地(每个项目)软件包-我希望它位于Javascript node.js/npm-覆盖本地默认模块目录(node\u模块),javascript,node.js,npm,bower,npm-install,Javascript,Node.js,Npm,Bower,Npm Install,假设我不想在node_模块中安装我的本地(每个项目)软件包-我希望它位于sources/node_modules下,而不仅仅是node_modules。是否可以像在鲍尔一样覆盖它 在bower中,您提供带有目录选项的.bowerrc文件,请参阅。它的工作原理就像您在本地拥有bower\u组件一样——没有额外的文件、加载程序,什么都没有——只是容器目录不同而已。tl;博士 解释 您可以(如@adeneo所述)简单地将软件包安装到任何文件夹,其中包括: $ npm install --prefix
sources/node_modules
下,而不仅仅是node_modules
。是否可以像在鲍尔一样覆盖它
在bower中,您提供带有目录
选项的.bowerrc
文件,请参阅。它的工作原理就像您在本地拥有bower\u组件一样
——没有额外的文件、加载程序,什么都没有——只是容器目录不同而已。tl;博士
解释
您可以(如@adeneo所述)简单地将软件包安装到任何文件夹,其中包括:
$ npm install --prefix sources/ my-package
这将安装到sources/my-package
。然而,这种解决方案在两个方面远远不够整洁:
package.json
听起来,与其安装单个软件包,不如将package.json
中的所有内容安装到sources/
文件夹中。问题是,当您执行npm安装--prefix sources/
时,它还会在sources/
文件夹中查找package.json
。如果这对你有用,那就太好了
我发现在项目根目录中保存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')
您可以在此提供帮助:
$ export NODE_PATH=`pwd`/sources/node_modules
$ node -e "require('my-module')" # Success
有一个重要的警告:节点
将按特定顺序查找模块:
节点\u modules
文件夹中节点\u modules
文件夹中,然后是其父目录等节点的路径中\u PATH
,如果尚未找到模块因此,请注意,当前目录或任何父目录中没有任何其他提到您的模块的
节点\u模块
文件夹,否则事情可能会变得非常混乱。在根目录中创建本地\u模块,并添加package.json“@amazon/product module”:“文件:local\u modules/@amazon/product module”
现在进行npm更新,您将把本地的_modules/@amazon/product module文件放入node_module/@amazon/product module当然,只需执行
npm安装--prefix/sources/node_modules
或创建一个symlink@adeneo嗯,是的,我发现了,抱歉不提这个。关于你的建议-那些只调用require
的文件会像标准节点(模块)
一样使用这些包吗?如果你使用require('/sources/node(模块)
的话,它们会被使用吗,可能还有一个替代项您还可以创建一个环境变量标志,并像这样使用它:require(process.env.MY_flag | |“MY_module”)代码>
$ export NODE_PATH=`pwd`/sources/node_modules
$ node -e "require('my-module')" # Success
file structure
local_modules
@amazon (folder)
product-module (folder)
[add your file which overrides]