【问题标题】:node.js / npm - override local default modules directory (node_modules)node.js / npm - 覆盖本地默认模块目录(node_modules)
【发布时间】:2016-04-23 21:02:59
【问题描述】:

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

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

【问题讨论】:

  • 当然,只需 npm install --prefix /sources/node_modules <package> 或创建符号链接
  • @adeneo mhm,是的,我发现了,抱歉不提了。关于您的建议 - 这些软件包是否可用于仅调用 require 的文件,就像使用标准 node_modules 一样?
  • 如果你这样做了require('/sources/node_modules/module')
  • 曾经有一个require.paths,但似乎已弃用,可能有替代品
  • 您也可以创建一个环境变量标志,并像这样使用它:require(process.env.MY_FLAG || 'my_module');

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


【解决方案1】:

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

要求

正如您所提到的,您可能希望您的脚本能够像正常一样需要模块 - 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的路径中,如果还没有找到模块

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-16
      • 2015-07-03
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多