gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:19 25 4
gpt4 key购买 nike

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

在 Bower 中,您提供带有 directory 选项的 .bowerrc 文件,请参阅 docs 。它的工作原理与您在本地拥有 Bower_components 完全一样 - 没有额外的文件、加载程序,什么都没有 - 只是容器目录不同。

最佳答案

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

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

$ 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 文件夹提及您的模块,否则事情可能会变得非常困惑。

关于javascript - node.js/npm - 覆盖本地默认模块目录(node_modules),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34859014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com