前言
一、npm包常见的属性
- name是项目的名称;
- version是当前项目的版本号;
- description是描述信息,很多时候是作为项目的基本描述;
- author是作者相关信息(发布时用到);
- license是开源协议(发布时用到);
- main属性:程序的主入口
- private属性:private属性记录当前的项目是否是私有的;
当值为true时,npm是不能发布它的,这是防止私有项目或模块发布出去的方式;
-scripts属性:scripts属性用于配置一些脚本命令,以键值对的形式存在;
配置后我们可以通过 npm run 命令的key来执行这个命令;
npm start和npm run start是等价的;
对于常用的 start、 test、stop、restart可以省略掉run直接通过 npm start等方式运行; - dependencies属性为生产环境依赖 下载包的时候后面添加-S,将会添加到dependencies中(npm install axios -S)
- devDependencies属性 生产环境不依赖的包 如打包工具webpack ,通过-D,将会安装到devDependencies中 ( npm install webpack -D)
二、npm版本管理
- 我们安装的包前面的^ ~是什么,0.20.0又是什么呢?
"dependencies": {
"axios": "^0.20.0"
},
"devDependencies": {
"webpack": "~3.6.0"
}
- X.Y.Z是安装包的版本
X 主版本号(major):当你做了不兼容的 API 修改(可能不兼容之前的版本);
Y 次版本号(minor):当你做了向下兼容的功能性新增(新功能增加,但是兼容之前的版本);
Z 修订号(patch):当你做了向下兼容的问题修正(没有新功能,修复了之前版本的bug);- ^和~的区别
^x.y.z:表示x是保持不变的,y和z永远安装最新的版本;
~x.y.z:表示x和y保持不变的,z永远安装最新的版本;
三、npm install过程
npm install会检测是有package-lock.json文件:
- 没有lock文件
1.分析依赖关系,这是因为我们可能包会依赖其他的包,并且多个包之间会产生相同依赖的情况; 从registry仓库中下载压缩包(如果我们设置了镜像,那么会从镜像服务器下载压缩包);
2.获取到压缩包后会对压缩包进行缓存(从npm5开始有的);
3.将压缩包解压到项目的node_modules文件夹中 - 有lock文件
1.检测lock中包的版本是否和package.json中是否一致
1.1、不一致,那么会重新构建依赖关系,直接会走顶层的流程;
1.2、一致的情况下,会去优先查找缓存 如果没有找到,会从registry仓库下载,直接走顶层流程;
查找到,会获取缓存中的压缩文件,并且将压缩文件解压到node_modules文件夹中;
四、Yarn工具
- 另一个node包管理工具yarn:弥补 npm 的一些缺陷而出现的(比如安装依赖速度很慢、版本依赖混乱等等一系列的问题)
。