首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让多个项目共享node_modules目录?

如何让多个项目共享node_modules目录?
EN

Stack Overflow用户
提问于 2015-04-22 10:53:46
回答 7查看 73.1K关注 0票数 113

每当我做项目时,我必须下载节点模块的所有依赖项。在不复制node_modules的情况下,有没有办法在多个项目中共享中心node_modules?

就像下面的代码一样,我每次都要运行很多命令。

代码语言:javascript
复制
npm install gulp-usemin                                                                        
npm install gulp-wrap
npm install gulp-connect
npm install gulp-watch
npm install gulp-minify-css
npm install gulp-uglify
npm install gulp-concat
npm install gulp-less
npm install gulp-rename
npm install gulp-minify-html
EN

回答 7

Stack Overflow用户

发布于 2015-04-22 11:59:25

你绝对可以在多个项目之间共享一个node_modules目录。

来自

如果传递给require()的模块标识符不是本机模块,并且不是以“/”、“../”或“./”开头,则节点从当前模块的父目录开始,添加/node_modules,并尝试从该位置加载模块。

如果在那里找不到它,那么它将移动到父目录,依此类推,直到到达文件系统的根目录。

例如,如果'/home/ry/projects/foo.js‘中的文件名为require('bar.js'),则节点将按以下顺序在以下位置查找:

/home/ry/projects/node_modules/bar.js /home/ry/node_modules/bar.js /home/node_modules/bar.js /node_modules/bar.js

因此,只需在项目目录中放置一个node_modules文件夹,然后放入您想要的任何模块。就像平常一样要求它们。当node在你的项目文件夹中找不到node_modules目录时,它会自动检查父文件夹。所以让你的目录结构像这样:

代码语言:javascript
复制
-myProjects
--node_modules
--myproject1
---sub-project
--myproject2

因此,像这样,即使您的子项目的依赖项也可以在您的主node_modules存储库上绘制。

这样做的一个缺点是您必须手动构建您的package.json文件(除非有人知道使用grunt或其他工具自动执行此操作)。当您安装软件包并将--save arg添加到npm install命令时,它会自动将其附加到依赖项部分或您的package.json中,这很方便。

票数 106
EN

Stack Overflow用户

发布于 2018-06-12 01:44:02

尝试使用pnpm而不是npm。

pnpm使用硬链接和符号链接在磁盘上只保存一次模块的一个版本。

如果您安装了npm,则可以使用以下命令在终端中进行安装:

代码语言:javascript
复制
npm install -g pnpm

要更新现有安装(和子目录),请使用:

代码语言:javascript
复制
pnpm recursive install

或者使用速记命令(如果只需要针对一个目录,则关闭-r )

代码语言:javascript
复制
pnpm -r i

一个有用的提示:,你可能会发现一些罕见的包并没有定义它们的所有依赖项。它们可能依赖于npm或yarn安装的平面node_modules文件目录结构。如果遇到缺少依赖项的问题,请使用以下命令将所有子依赖项提升到平面文件结构中:

代码语言:javascript
复制
pnpm install --shamefully-hoist

最好避免使用--shamefully-hoist标志,因为它从一开始就违背了使用pnpm的目的,所以请先尝试使用命令pnpm i your-missing-package (请参阅pnpm FAQ)。

票数 30
EN

Stack Overflow用户

发布于 2016-06-01 22:47:11

我发现了一个窍门,只要看看Symbolic Links (symlinks) on Windows or Linux,它就像快捷键一样工作,但更强大。

你只需要在你想要的任何地方为你的node_modules文件夹创建一个Junction。交叉点只是您的原始node_modules文件夹的快捷方式。在您的项目文件夹中创建它,如果使用npm install,则会在该文件夹中创建实际的node_modules。

要实现这一点,你至少需要一个node_modules真正的文件夹,然后在其他项目中建立一个到它的连接。

在Windows上,可以使用命令提示符,也可以使用应用程序。使用命令提示符可以给你更多的控制,使用应用程序更容易,我建议使用Link Shell Extension

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29786887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档