安装节点包时可以使用自定义目录名称而不是“node_modules”吗?
Posted
技术标签:
【中文标题】安装节点包时可以使用自定义目录名称而不是“node_modules”吗?【英文标题】:Can a custom directory name be used instead of 'node_modules' when installing node packages? 【发布时间】:2014-03-16 03:16:23 【问题描述】:我创建了一个package.json
,我运行npm install
,它工作正常。它在我的根文件夹中创建了一个node_modules
目录(我可以使用--prefix
选项进行更改)。但是,我不太喜欢下划线。我想更改 NPM 将模块下载到的目录的名称。我希望将其命名为 nmods
或 node-modules
或类似名称。
Bower 可以通过读取当前目录中.bowerrc
文件中的directory
属性来做类似的事情。有没有办法对 NPM 做同样的事情?
【问题讨论】:
绝对!此外,由于node_modules
依赖项被一遍又一遍地递归,这个相当长的名称有时也会打破 Windows 中的文件路径限制。像nmods
这样的短名称会大大降低这种风险......哦,天哪。
然而,正如@thomasjaworski.com 所争论的那样,它可能是一个 Windows 错误,而不是一个节点/npm 错误。这在 github 问题(找不到 atm)上被大量讨论,所以我不会争论;)。只是说:P
同意 @codeninja 我知道你的意思是哪个 github 线程,我觉得这两个都不是一个好的借口 :) Windows 因路径长度限制而完全失败,而 nodejs 的家伙并没有因为选择这个悲惨而做得更好约定
我描述了基于符号链接 (Mac/Linux) 的部分解决方法:Huge number of files generated for every Angular project
【参考方案1】:
没有办法改变它。 node_modules
文件夹实际上并不特定于 NPM,它是 Node 核心模块加载系统的一部分。 Seen here in module.js
.
如您所提到的那样全局更改它也可能会破坏您正在使用的一些模块,因为模块有时是它们的依赖关系已经存在于node_modules
中的包,并且更改它会导致它中断。
【讨论】:
npm 的常见问题解答也非常明确地解决了这个问题:npmjs.org/doc/… 并解释了其中的一些原因。 该死的下划线! :( @ZiaUrRehman,这只是一个约定。社区中的每个人都在使用它,所以你只需要习惯它。 旧常见问题解答的缓存链接:web.archive.org/web/20150216184318/https://docs.npmjs.com/misc/… npm 常见问题解答链接已损坏。【参考方案2】:在 npm 中无法更改它,但是,在yarn package manager 中可以选择配置它。
yarn install --modules-folder <path>
【讨论】:
创建 .yarnrc 文件省去了每次都必须输入 --modules-folder 的麻烦。请参阅下面的答案。 但是在执行Yarn run时它不起作用,它说找不到包webpack。【参考方案3】:你可以通过添加一个名为 '.yarnrc' 的文件轻松实现这一点 内容如下:
# ./.yarnrc
--modules-folder lib
下次你运行 'yarn' 时,它将创建 lib 文件夹并将软件包安装到那里而不是 node_modules 中。
现在,如果我们能让 'npm install' 变得同样聪明就好了。
【讨论】:
你会把这个放在用户目录还是项目目录? 它应该放在与创建 node_modules 文件夹相同的文件夹中。这应该与您从中运行纱线命令的文件夹相同。这通常是项目目录。例外情况是,如果您通常从项目的子文件夹中运行 yarn,那么您应该将 .yarnrc 文件夹放在那里。 这在require
的世界里会怎样?以上是关于安装节点包时可以使用自定义目录名称而不是“node_modules”吗?的主要内容,如果未能解决你的问题,请参考以下文章
Woocommerce REST API:自定义字段而不是产品名称
我可以使用 IP 地址作为名称服务器而不是创建自定义名称服务器 [关闭]