npm
npm
包中的模块版本都需要遵循 SemVer
规范,该规范的标准版本号采用 X.Y.Z
的格式,其中 X
、Y
和 Z
均为非负的整数,且禁止在数字前方补零:
X
是主版本号(major):修改了不兼容的 APIY
是次版本号(minor):新增了向下兼容的功能Z
为修订号(patch):修正了向下兼容的问题
当某个版本改动比较大、并非稳定而且可能无法满足预期的兼容性需求时,我们可能要先发布一个先行版本。
先行版本号可以加到主版本号.次版本号.修订号
的后面,通过 -
号连接一连串以句点分隔的标识符和版本编译信息:
- 内部版本(alpha)
- 公测版本(beta)
正式版本的候选版本rc(即 Release candiate)
“5.0.3”表示安装指定的5.0.3版本
- “~5.0.3”表示安装5.0.X中最新的版本
- “^5.0.3”表示安装5.X.X中最新的版本
安装的时候,包会在同一时间下载和安装,中途某个时候,一个包抛出了一个错误,npm会继续下载和安装包。因为npm会把所有的日志输出到终端,有关错误包的错误信息就会在一大堆npm打印的警告中丢失掉,你甚至永远不会注意到实际发生的错误。
5.0以下版本npm缺陷:
- 安装特别慢,采用队列形式安装
- 版本无法保持一致性,每次执行npm install 的时候,都会下载最新版本的文件
- 安装过程中如果出现问题,会跳过error继续安装。
yarn解决的问题:
- 安装包的时候,同步安装,解决npm队列形式的安装,速度提升
- 支持离线模式(前提是曾经下载过这个包)
- 安装版本统一 :有一个yarn.lock文件,安装会严格按照yarn.lock的版本号进行安装,(npm也支持锁定,需要执行npm shrinkwrap)
npm 5.0
增加了package-lock.json
- 版本
- 位置
- 完整的hash
package-lock.json 在npm 5.4版本之后:
- 先去判断package-lock.json
- 如果一致,直接按照package-lock.json的版本号去下载
- 如果不一致,npm会根据package中版本号,以及语义含义去下载最新的包,并更新至lock ,保持一致。
yarn和npm命令对比
1 | npm |
1 | npm install express -g |
1 | npm login |
npm包制作
1. 新建一个空白文件夹
2. 初始化项目
注意name不要和现有的其他npm包重名了,不然一会儿发Npm包的时候会失败,可以先去npmjs.com搜一下有没有重名的。
1 | npm init |
3. package.json
1 | { |
4. 执行下载依赖包
1 | npm install |
5. 新建 src 和 dist 文件夹
dist代表发布时的目录,src是开发目录。dist里面的js是到时候通过webpack打包后的文件。只会提交dist目录到npm官网上,src不提交。
1 | <!-- app.vue --> |
1 | // index.js |
6. 加入webpack打包配置,并把src中的内容打包进dist目录中
在根目录下新增webpack.config.js文件
1 | const path = require("path"); |
7. 打包
注意,这里要修改package.json中的main字段指向的主文件信息
1 | npm run build |
修改package.json中的main字段
1 | { |
8. 忽略要上的文件
新建一个文件,名为.npmignore,是不需要发布到npm的文件和文件夹,规则和.gitignore一样。如果你的项目底下有.gitignore但是没有.npmignore,那么会使用.gitignore里面的配置
1 | .* |
9. 发布
先去npm注册一个账号 (一定要进行邮箱验证),然后进入根目录,运行 npm login
它会让你输入你的用户名,密码和邮箱,若登录成功,会显示:
1 | Logged in as 你的名字 on https://registry.npmjs.org/. |
接着执行 npm publish 发布到npm官网上
当你的包需要更新时,需要自己手动修改package.json中的version版本号,惯例是+1啦,比如1.0.0–>1.0.1。然后 npm login, npm publish。即可。
如果发现 npm login 不行,报 409 error,那么你可以考虑换下淘宝源
1 | npm login --registry http://registry.npmjs.org |
node&npm version update
1 | node -v |