发布npm包
前言
在工作中,我们时常需要代码共享,在N多个项目中都需要同一份代码包。通常我们是ctrlC + ctrlV,但不够高效!且当包需要更新的时候,需要在多处维护!npm恰好就能解决这些问题。
将包发布到npm上,其他项目通过npm install [包名] 就可以将包克隆到本地;安装包时,我们可以通过版本控制,直接选择latest 安装最新版本(但不建议这样做,最好还是将包版本锁定起来,避免包发生重大变更影响到我们的项目),这样包更新后,本地每次install都是最新的。
一、准备工作
1、注册npm账户
注册地址
2、全局安装nrm(npm仓库管理的软件,可用于npm仓库的快速切换)
npm i nrm -g
nrm常用命令
nrm // 展示nrm可用命令
nrm ls // 列出已经配置的所有仓库
nrm test // 测试所有仓库的响应时间
nrm add <registry> <url> // 新增仓库
nrm use <registry> // 切换仓库
二、npm包目录规范
readme文件目录生成工具treer
全局安装treer
npm i treer -g
生成readme目录,忽略node_modules
treer -i node_modules -e ./ result.txt // -i:忽略 -e:导出
npm包规范:
目录结构
.
├─.editorconfig // 编辑器文件格式配置
├─.eslintignore // eslint校验忽略配置
├─.eslintrc.js // eslint校验配置
├─.gitignore // git 提交忽略配置
├─.npmignore // npm发布忽略配置
├─package.json // 包的基本信息 npm init 初始化
├─README.md // 说明文档
├─src // 源码
| └index.js
├─lib // 三方库
├─examples // 使用Demo
├─dist // 构建后的文件
├─build // 构建配置文件
| ├─rollup.config.js
发布包
1、发布scoped包
相比unscoped包,scoped包为自己发布的包提供命名空间,防止与他人的包名冲突。
- 登录:npm adduser --registry=registry.npmjs.org/
输入:
用户名
密码
邮箱 - 发布:npm publish --registry=registry.npmjs.org/
- 加作用域:npm init --scope=@<npm用户名> -y
- 再次发布:npm publish --registry=registry.npmjs.org/
报错:
npm ERR! code E402
npm ERR! 402 Payment Required - PUT registry.npmjs.org/@panting%2f… - You must sign up for private packages
原因:
npm publish 命令执行,默认是进行私有发布,私有发布需要收费
解决:
将包公共发布 - 公共发布:npm publish --access public --registry=registry.npmjs.org/
安装和使用包
1、安装:npm i <包名>
2、使用包:require('包名')
迭代
1、更新内容
2、更新版本
npm版本共三位,以.隔开,从左到右代表:主版本(major)、次要版本(minor)、补丁版本(patch)
版本变更规范:
| 代码状态 | 等级 | 规则 | 版本样例 |
|---|---|---|---|
| 首次发布 | 新品发布 | 以1.0.0开始 | 1.0.0 |
| bug修复,向后兼容 | 补丁版本发布 | 变更第三位数字 | 1.0.1 |
| 新功能,向后兼容 | 次要版本发布 | 变更第二位数字,并且第三位数字重置为0 | 1.1.0 |
| 重大变更,不向后兼容 | 主版本发布 | 变更第一位数字,并且第二位和第三位数字重置为0 | 2.0.0 |
变更版本号的命令:npm version <major|minor|patch>
假如本次发布是次要版本发布,执行命令
npm version minor
或者手动更新package.json中的version
3、发布npm publish --registry=registry.npmjs.org/
查看npm包的所有版本:
npm view <包名> versions
4、更新安装
npm up <包名>
废弃和删除
* 废弃不会将包或版本从npm仓库删除,任然可以继续下载安装,并在安装时会有警告提示
* 删除会将包从npm彻底删除,无法被下载安装
* 版本的废弃/删除
* 包的废弃/删除
1、废弃
废弃原因:
- 版本:鼓励用户更新到最新版本
- 包:此包内容已经过时,没有维护的价值
- 废弃指定版本
npm deprecate <包名>[@<version>] <废弃原因>
2、删除
npm删除限制:
- 删除的版本24小时后方可重发
- 只有发布72小时之内的包可以删除
- 删除发布的包
npm unpublish <包名> --force
参考npm发布教程
最后,我觉得作为一个开发者,我们有责任和义务维护每一个社区的纯净,所以在发布npm包的时候应该尽量精益求精,避免发一些没有价值的东西给其他人造成困扰。构建美好生态,人人有责