发布npm包

309 阅读3分钟

发布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包为自己发布的包提供命名空间,防止与他人的包名冲突。

  1. 登录:npm adduser --registry=registry.npmjs.org/
    输入:
    用户名
    密码
    邮箱
  2. 发布:npm publish --registry=registry.npmjs.org/
  3. 加作用域:npm init --scope=@<npm用户名> -y
  4. 再次发布: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 命令执行,默认是进行私有发布,私有发布需要收费
    解决:
    将包公共发布
  5. 公共发布: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
新功能,向后兼容次要版本发布变更第二位数字,并且第三位数字重置为01.1.0
重大变更,不向后兼容主版本发布变更第一位数字,并且第二位和第三位数字重置为02.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、废弃
废弃原因:

  • 版本:鼓励用户更新到最新版本
  • 包:此包内容已经过时,没有维护的价值
  1. 废弃指定版本
    npm deprecate <包名>[@<version>] <废弃原因>
    

2、删除
npm删除限制:

  • 删除的版本24小时后方可重发
  • 只有发布72小时之内的包可以删除
  1. 删除发布的包
npm unpublish <包名> --force

参考npm发布教程

最后,我觉得作为一个开发者,我们有责任和义务维护每一个社区的纯净,所以在发布npm包的时候应该尽量精益求精,避免发一些没有价值的东西给其他人造成困扰。构建美好生态,人人有责