解决npm install安装了太多架包的问题

本文解析了使用npm安装Vue 1.0.28版本时,node_modules文件夹出现大量额外依赖的原因。介绍了如何通过使用--legacy-bundling参数来控制依赖安装方式,使依赖更加清晰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装vue 1.0.28时,执行如下命令,却发现node_modules文件里猛然增加了几十个架包,看起来非常不爽。

#   只安装Vue V1的最新版本
npm install vue@">=1.0.28 < 2.0.0" --save
#   输出目录文件   
ll node_modeles/

执行ll命令后,输出的内容如下:

drwxr-xr-x 1 yiifaa 197609 0 127 16:10 acorn/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 amdefine/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 ast-types/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 balanced-match/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 base62/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 bootstrap/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 brace-expansion/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 commander/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 commoner/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 concat-map/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 defined/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 detective/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 envify/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 esprima-fb/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 font-awesome/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 glob/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 graceful-fs/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 graceful-readlink/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 iconv-lite/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 inflight/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 inherits/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 jqGrid/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 jquery/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 jstransform/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 minimatch/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 minimist/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 mkdirp/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 object-assign/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 once/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 path-is-absolute/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 private/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 q/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 recast/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 require-css/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 requirejs/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 source-map/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 text/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 through/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 vue/
drwxr-xr-x 1 yiifaa 197609 0 127 16:10 wrappy/

对比package.json文件,发现内容增多了几倍,package.json的依赖如下:

"dependencies": {
    "bootstrap": "^3.3.6",
    "font-awesome": "^4.7.0",
    "jqGrid": "^5.1.1",
    "jquery": "^3.1.1",
    "require-css": "^0.1.8",
    "requirejs": "^2.3.2",
    "text": "github:requirejs/text",
    "vue": "^1.0.28"
 }

这些莫名奇妙的acorn、amdefine……是从哪里来的?

查看npm使用文档后,添加参数–only参数,只安装生产版本,发现node_modules目录的结果依旧如此,命令如下。

# --only还可以取值为dev或development,表示还会安装开发依赖
npm install vue@">=1.0.28 < 2.0.0" --save --only=production

继续翻阅npm使用文档,发现文档里有一段这样的话

dependencies will be added as close to the top as is possible without breaking any other modules

原来如此!NPM从3.0.0开始,架包的依赖不再安装在每个架包的node_modules文件夹内,而是安装在顶层的node_modules文件夹中。如果要启用之前的风格,则可以添加命令参数legacy-bundling,如下:

#   清空node_modules文件后,重新执行命令
npm install vue@">=1.0.28 < 2.0.0" --legacy-bundling

再次运行”ll node_modeles/”,发现架包已经干净清澈了很多,与package.json完全呼应上了,如下:

drwxr-xr-x 1 yiifaa 197609 0 127 15:53 bootstrap/
drwxr-xr-x 1 yiifaa 197609 0 127 15:53 font-awesome/
drwxr-xr-x 1 yiifaa 197609 0 127 15:53 jqGrid/
drwxr-xr-x 1 yiifaa 197609 0 127 15:53 jquery/
drwxr-xr-x 1 yiifaa 197609 0 127 15:53 require-css/
drwxr-xr-x 1 yiifaa 197609 0 127 15:53 requirejs/
drwxr-xr-x 1 yiifaa 197609 0 127 15:53 text/
drwxr-xr-x 1 yiifaa 197609 0 127 15:53 vue/

结论

执行npm install后,造成node_modules文件夹中出现了太多架包,并非是命令执行错误或者是环境的问题,而是npm升级导致的规范变更。

脑中突然浮现一个问号,npm官方为何不将这些依赖全部存入一个固定的文件夹,例如dependence,这样既能保证所有库包的版本兼容性,又能保证node_modules的干净性?

为了解决 `npm install` 安装依赖速度慢的问题,可以采用以下几种方式来加速: 1. **使用 cnpm 工具** 使用淘宝 NPM 镜像定制的 `cnpm` 命令行工具代替默认的 `npm`。首先全局安装 `cnpm`: ```bash npm install -g cnpm --registry=https://registry.npm.taobao.org ``` 安装完成后,可以使用 `cnpm install` 来替代 `npm install`,这将自动配置为使用淘宝的 NPM 镜像[^1]。 2. **切换 registry 到 cnpm 地址** 可以通过 `nrm` 工具查看和切换 `registry`,从而加速依赖安装。首先查看所有可用的 `registry`: ```bash nrm ls ``` 输出结果中会列出括 `npm` 和 `cnpm` 在内的多个镜像地址。然后切换到 `cnpm`: ```bash nrm use cnpm ``` 这样就将 `registry` 设置为 `http://r.cnpmjs.org/`,加快了依赖的下载速度[^3]。 3. **直接设置 npm 的 registry** 如果想使用 `cnpm` 或 `nrm`,可以直接修改 `npm` 的配置,将其指向更快的镜像源: ```bash npm config set registry https://registry.npm.taobao.org ``` 该方法能够快速更改 `npm` 默认使用的镜像仓库,避免因官方源速度慢而影响安装效率[^2]。 4. **使用缓存机制** 另外,也可以利用本地或 CI 环境中的缓存功能,在多次安装时复用已有的依赖,减少重复下载的时间开销。 5. **优化网络环境** 检查当前的网络连接是否稳定,或者尝试更换网络环境(如从公司网络切换至家庭宽带),也可能有助于提升下载速度。 ### 总结 推荐优先使用 `cnpm` 或 `nrm` 工具进行加速,这些方法简单高效,且能显著提升依赖安装的速度。同时,根据具体场景选择合适的镜像源和配置方式,可以灵活应对同开发环境的需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值