NodeJS新手求助:npm安装大量模块原因及多项目共享方案
嗨,作为Node.js新手刚接触npm的时候,看到node_modules里一堆包确实会懵,我来给你拆解这两个问题~
为什么安装imgur模块后node_modules有这么多依赖?
这其实是npm的依赖树机制导致的:
- imgur模块本身并不是完全独立的,它会依赖其他工具包(比如处理HTTP请求的
axios、处理表单数据的form-data等)来实现功能; - 而这些被依赖的包,又可能依赖更底层的小工具包,层层嵌套下来,最终就会产生几十上百个依赖;
- 另外npm为了避免版本冲突,会给不同依赖包安装各自需要的版本——比如如果包A需要
lodash@4.x,包B需要lodash@3.x,npm会分别安装这两个版本,这也会让依赖数量变多。
绝大多数这些依赖都是必需的,每个包都需要对应的依赖才能正常运行,npm会自动帮你处理版本兼容问题,不用太担心冗余。
能不能用一个node_modules文件夹给多个测试项目共享?
当然可以,有几种实用的方式:
npm link 本地链接:
- 在其中一个已经安装好imgur依赖的项目里,进入
node_modules/imgur目录,执行npm link,把这个imgur包链接到全局; - 然后在其他需要用imgur的项目目录下,执行
npm link imgur,这个项目就会直接使用全局链接的imgur及其依赖,不用再重复安装。
注意:如果不同项目需要不同版本的imgur,这种方式可能会导致版本冲突,适合测试项目都用同一版本的场景。
- 在其中一个已经安装好imgur依赖的项目里,进入
npm Workspaces(单仓库多项目):
如果你的多个测试项目都是相关的,可以把它们放在同一个根目录下,比如:my-test-projects/ ├── project1/ ├── project2/ └── package.json然后在根目录的
package.json里添加:{ "name": "my-test-workspace", "workspaces": ["project1", "project2"] }之后在根目录执行
npm install,npm会把所有项目的依赖统一安装在根目录的node_modules里,所有子项目都会共享这个依赖池,既节省空间又方便管理。额外提醒:不建议用全局安装(
npm install -g imgur)来给项目提供依赖,全局安装的包主要是给命令行工具用的,项目里直接引用全局包可能会导致版本不一致、部署时找不到依赖等问题。
内容的提问来源于stack exchange,提问作者Lord Null
相关产品推荐
相关产品推荐

