版本号
- 指定版本:比如
1.2.2
,遵循大版本.次要版本.小版本
的格式规定,安装时只安装指定版本 - 波浪号(tilde)+指定版本:比如
~1.2.2
,表示安装1.2.x
的最新版本(不低于1.2.2
),但是不安装1.3.x
,也就是说安装时不改变大版本号和次要版本号 - 插入号(caret)+指定版本:比如
ˆ1.2.2
,表示安装1.x.x
的最新版本(不低于1.2.2
),但是不安装2.x.x
,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0
,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容 - latest:安装最新版本
安装指令
npm i -S
即npm install --save
即写入dependencies
,项目运行所依赖的模块npm i -D
即npm install --save-dev
即写入devDependencies
,项目开发所依赖的模块
关于 package-lock.json
的更新
如果
npm i xxx -D
后只提交了package.json
,就会导致其他人拉取到的package.json
和lock
文件不同,那么执行npm i
时会根据package.json
中的版本号以及语义含义去下载最新的包,并更新lock
pkg.module
字段含义
pkg.module
字段要指向的应该是一个基于 ES6 模块规范的使用 ES5 语法书写的模块- 基于 ES6 模块规范是为了用户在使用我们的包时可以享受 Tree Shaking 带来的好处;使用 ES5 语法书写是为了用户在配置 babel 插件时可以放心的屏蔽node_modules 目录
相当于在一个包内同时发布了两种模块规范的版本。当打包工具遇到我们的模块时:
- 如果它已经支持pkg.module字段则会优先使用 ES6 模块规范的版本,这样可以启用 Tree Shaking 机制。
- 如果它还不识别pkg.module字段则会使用我们已经编译成 CommonJS 规范的版本,也不会阻碍打包流程。