首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的。教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转到教程
安装vue 1.0.28时,执行如下命令,却发现node_modules文件里猛然增加了几十个架包,看起来非常不爽。
# 只安装Vue V1的最新版本npm install vue@">=1.0.28 < 2.0.0" --save# 输出目录文件 ll node_modeles/
- 1
- 2
- 3
- 4
执行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/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
对比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" }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
这些莫名奇妙的acorn、amdefine……是从哪里来的?
查看npm使用文档后,添加参数–only参数,只安装生产版本,发现node_modules目录的结果依旧如此,命令如下。
# --only还可以取值为dev或development,表示还会安装开发依赖npm install vue@">=1.0.28 < 2.0.0" --save --only=production
- 1
- 2
继续翻阅npm使用文档,发现文档里有一段这样的话
dependencies will be added as close to the top as is possible without breaking any other modules
- 1
原来如此!NPM从3.0.0开始,架包的依赖不再安装在每个架包的node_modules文件夹内,而是安装在顶层的node_modules文件夹中。如果要启用之前的风格,则可以添加命令参数legacy-bundling,如下:
# 清空node_modules文件后,重新执行命令npm install vue@">=1.0.28 < 2.0.0" --legacy-bundling
- 1
- 2
再次运行”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/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
结论
执行npm install后,造成node_modules文件夹中出现了太多架包,并非是命令执行错误或者是环境的问题,而是npm升级导致的规范变更。
脑中突然浮现一个问号,npm官方为何不将这些依赖全部存入一个固定的文件夹,例如dependence,这样既能保证所有库包的版本兼容性,又能保证node_modules的干净性?