解决npm install安装了太多架包的问题
安装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 12月7
安装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 12月 7 16:10 acorn/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 amdefine/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 ast-types/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 balanced-match/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 base62/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 bootstrap/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 brace-expansion/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 commander/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 commoner/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 concat-map/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 defined/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 detective/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 envify/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 esprima-fb/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 font-awesome/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 glob/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 graceful-fs/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 graceful-readlink/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 iconv-lite/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 inflight/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 inherits/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 jqGrid/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 jquery/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 jstransform/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 minimatch/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 minimist/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 mkdirp/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 object-assign/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 once/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 path-is-absolute/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 private/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 q/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 recast/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 require-css/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 requirejs/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 source-map/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 text/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 through/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 16:10 vue/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 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 12月 7 15:53 bootstrap/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 15:53 font-awesome/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 15:53 jqGrid/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 15:53 jquery/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 15:53 require-css/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 15:53 requirejs/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 15:53 text/
drwxr-xr-x 1 yiifaa 197609 0 12月 7 15:53 vue/
结论
执行npm install后,造成node_modules文件夹中出现了太多架包,并非是命令执行错误或者是环境的问题,而是npm升级导致的规范变更。
脑中突然浮现一个问号,npm官方为何不将这些依赖全部存入一个固定的文件夹,例如dependence,这样既能保证所有库包的版本兼容性,又能保证node_modules的干净性?
更多推荐
所有评论(0)