npm 包发布和规范化管理

433 阅读2分钟

前段时间遇到了一些bug需要改公司的npm包,所以重新复习了一下npm的包发布流程总结并水了一篇文章。

初始化

npm init

初始化命令执行后会生成下面这个json文件

// package.json

{
  "name": "packageName",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",// 这里是包执行的主入口文件
  "bin": {}
    "command": "./bin/index"// 这是写cli要执行的入口位置
    },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "http://www.github.net/xxxx.git",
    "directory": "./dist/exce"//你的包在工程中的导出目录
  },


  "author": "",
  "license": "ISC",
  "dependencies": {
  }
}

本篇主要讲发布流程和包的版本管理,所以不再赘述怎么写包了

发布

当我们写好一个包要发版改怎么办。 如果是个人开发者不想直接写完发了那就直接

$ npm login ## 登录你的npm账号

Username: name
Password: *****
Email: (this IS public) xxx@mail.com

输入命令后需要你填入

  • npm用户名
  • 账号密码
  • 账号关联邮箱
  • 邮箱验证码

确认好你的 package.json 中的版本号之后

$ npm publish ## 在包路径内直接发布
## 或者你也可以使用
$ npm publish xxx.git ## 直接发布git项目路径

tips: 发布前确保 git status 为空状态,即当前没有任何更改操作。

简单的发布过程到此为止


按照官方文档的发布方式


$ npm publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>] [--otp otpcode] [--dry-run] 

## Publishes '.' if no argument supplied Sets tag 'latest' if no --tag specified

官方文档中提供了 --tag --tarball 命令其实不太适用。

我们在实际开发过程中更倾向于使用 git tag 对各个版本做管理

npm_publish_way.png

版本号

发布包之前可以通过 npm view [packagename] version 或者 npm view [packagename] versions 查看包的最新版本号和各版本号。

版本号遵循 SemVer规范

SemVer规范的标准版本号采用 X.Y.Z 的格式,其中 X、Y 和 Z 为非负的整数,且禁止在数字前方补零。

  • X 对应主版本号(major):当项目中做了不兼容的 API 修改,属于大版本提升
  • Y 对应次版本号(minor):当你做了向下兼容的功能性新增
  • Z 对应修订号(patch):当你做了向下兼容的问题修正。

每个元素必须以数值来递增。

发布过程中可能会遇到的问题

  1. PUT 403 npm ERR!:

    1-1.

    npm ERR! 403 403 Forbidden - PUT r.cnpmjs.org/scaffold - [no_perms] Private mode enable, only admin can publish this module

    发布的镜像错了,本地在使用cnpm的镜像。

    执行npm config set registry=http://registry.npmjs.org这个命令改变npm源即可

    1-2.

    .npm ERR! 403 403 Forbidden - PUT registry.npmjs.org/packagename - You cannot publish over the previously published versions: x.x.x.

    . 发布包版本已存在

  2. npm ERR! 401 Unauthorized:未登录就执行了 npm publish

  3. 在 npm 发布了包,但是同事用 cnpm 却无法获取最新版本。

可以使用 cnpm sync [packagename] 或者直接打开网站同步

https://npm.taobao.org/sync/packagename packagename替换成你发布的包名

参考文档

  1. 【npm version patch_NPM 如何管理依赖包版本】
  2. 【npm version doc】
  3. 【npm publish doc】