每当我创建项目时,我都必须下载节点模块的所有依赖项。如果不复制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
答案 0 :(得分:59)
您绝对可以在项目中共享node_modules目录。
来自 node's documentation :
如果传递给require()的模块标识符不是本机模块, 并且不是以' /',' ../'或者' ./'开头,然后节点从 当前模块的父目录,并添加/ node_modules和 尝试从该位置加载模块。
如果在那里找不到它,那么它会移动到父目录,然后 等等,直到达到文件系统的根目录。
例如,如果文件位于' /home/ry/projects/foo.js'叫 要求(' 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存储库上绘制。
这样做的一个缺点是你必须手动构建你的package.json文件(除非有人知道用grunt或其他东西自动化它的方法)。当您安装软件包并将--save arg添加到npm install
命令时,它会自动将其附加到依赖项部分或package.json,这很方便。
答案 1 :(得分:10)
我找到了一个技巧,只需看看Symbolic Links (symlinks) on Windows or Linux,它就像快捷方式一样工作但功能更强大。
您只需在任意位置为node_modules
文件夹制作Junction
即可。该结点只是原始node_modules文件夹的快捷方式。在项目文件夹中创建它,如果使用了npm install
,将创建实际的node_modules。
要实现这一目标,您需要至少一个node_modules
真实文件夹,然后在其他项目中与其建立连接。
在Windows上,您可以使用命令提示符,也可以使用应用程序。使用命令提示符可以提供更多控制,使用应用程序更容易,我建议使用Link Shell Extension。
答案 2 :(得分:8)
尝试pnpm而不是npm。
pnpm使用硬链接和符号链接在磁盘上只保存一次模块版本。
安装时:
npm install -g pnpm
要更新现有安装(和子目录),请使用:
pnpm recursive install
答案 3 :(得分:1)
主目录应如下所示
node_modules
Project 1
Project 2
Project 3
Project 4
只需打开文件Project 1/.angular-cli.json
更改架构
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
到
"$schema": "./../node_modules/@angular/cli/lib/config/schema.json"
并且不要忘记在项目目录中创建node_modules
空文件夹
答案 4 :(得分:1)
另请参阅npm v7.0.0对工作区的支持
https://github.com/npm/rfcs/blob/latest/implemented/0026-workspaces.md
答案 5 :(得分:0)
假设有一个node_modules,它应该包含所有应用程序的所有包。因此,您的应用程序也将共享大多数唯一的package.json条目(只是名称应该更改)
我的想法是拥有一个根和多个src级别,如下所示
root\package.json
root\node_modules
root\\..
root\app1\src\\..
root\app2\src\\..
您可能面临的唯一问题是为任何应用程序备份json(或tsconfig),并在您处理它或设置启动脚本以提供任何应用程序时还原它们