我怎样才能让多个项目共享node_modules目录?
每当我做项目,我都必须下载节点模块的所有依赖关系。 如果不复制node_modules,是否有共享多个项目中的中央node_modules?
像下面这样,我每次都要运行很多命令。
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
您绝对可以在项目中共享一个node_modules目录。
从节点的文档 :
如果传递给require()的模块标识符不是本地模块,并且不以“/”,“../”或“./”开头,则节点从当前模块的父目录开始,并添加/ node_modules,并尝试从该位置加载模块。
如果在那里没有find,那么它会移到父目录,依此类推,直到到达文件系统的根目录。
例如,如果'/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_modules目录时,会自动检查父文件夹。 所以让你的目录结构如下所示:
-myProjects --node_modules --myproject1 ---sub-project --myproject2
所以就像这样,甚至你的子项目的依赖关系也可以在你的主要node_modules存储库上绘制。
这样做的一个缺点是你将不得不手动构build你的package.json文件(除非有人知道用grunt或其他方法自动化这个)。 当你安装你的软件包并将–save arg添加到npm install
命令时,它会自动将它附加到dependencies部分或package.json,这很方便。
我发现了一个窍门,就是看看Windows或者Linux上的符号链接(符号链接) ,它就像快捷键一样工作,但function更强大。
只需要为你的node_modules
文件夹build立一个Junction
。
为了达到这个目的,至less需要一个node_modules
实体文件夹,然后在其他项目中build立一个Junction。
在Windows上,您可以使用命令提示符或使用应用程序。 使用命令提示符给你多一点控制,使用应用程序更容易我build议链接shell扩展 。
假设有一个node_modules,它应该包含所有应用程序的所有包。 因此你的应用程序也将分享大部分独特的package.json条目(只是名称应该改变)
我的想法是有一个单一的根和多个src级别如下
root\package.json root\node_modules root\\.. root\app1\src\\.. root\app2\src\\..
你可能面临的唯一问题是为任何应用程序备份json(或tsconfig),并在处理它时恢复它们,或设置启动脚本来为任何应用程序提供服务