npm-publish-flow

npm 发包流程总结

注册npm账号

package.json中指明必要字段

  • name、version是必须的,缺失将无法发布
  • main指向入口文件,一般为commonjs、esm格式
  • module指向esm格式入口文件
  • unpkg字段
    • 发布到npmjs.com中的包会自动同步到unpkg.com
    • 通过unpkg字段指明unpkg.com应该如何查找入口文件
    • 一般为umd格式
  • repository

    1
    2
    3
    4
    "repository": {
        "type""git",
        "url""git+https://github.com/BryanAdamss/drawing-board.git"
      }
  • 参考https://juejin.im/post/5b231f6ff265da595f0d2540

检查包名是否重名

  • 重名时,将报403错误,提示没有权限提交包(你没有权限修改别人的包)
    • 403 Forbidden - PUT http://registry.npmjs.org/react-native-app-info - You do not have permission to publish "react-native-app-info". Are you logged in as the correct user?
  • npm会使用package.json中的name字段做为包名
  • https://www.npmjs.com/中搜索包名,检查是否重名
  • 有重名,则需要修改包名
    • 修改为scope package@scope/package-name
      • 这种在npm publish时会被自动认定为私有仓库,私有仓库是需要付费的
      • 需要在npm publish时追加--access public指明包为公开访问
        • npm publish --access=public
        • 注意的是这种形式的包名跟 npm 账户有对应关系,不能随便填写
          • 需要在init时指明scope
            • npm init --scope=@user-name
    • 直接修改为一个不会重名的包名
  • 参考https://github.com/XXHolic/segment/issues/28

检查仓库源

登录

  • 使用npm login或npm adduser命令
  • 然后输入账号、密码登录
  • 登录成功会提示

发包publish

  • 登录后,直接npm publish即可
    • 记得publish前要先构建一波

使用stand-version做发包版本控制

1
2
3
4
5
6
7
8
9
10
11
12
13
// package.json
 "scripts": {    
    "release""standard-version",
  }


// 初次发布版本
npm run release --first-release
// 添加版本信息和指定发布版本等级
npm run release -m "Commit message" -r minor

// 确认发布,npm publish 发布到 npm
git push --follow-tags origin master && npm publish

常见错误

  • 无法login
    - 源不对
    
    • 403
      • 包重名
        • 修改包名
      • 没有发包权限
        • 联系管理员开通权限
      • 包版本重复
        • 更新发包版本
      • 源不对
        • 切换源
    • 发布成功后,使用淘宝源无法下载最新包
      • 淘宝源同步问题
        • 等待淘宝源同步后再下载
        • 切换到官方源下载
    • 参考https://www.jianshu.com/p/5ea8e50d628e

总结

  • 注册账号
  • 检查package.json必要字段
  • 检查重名
  • 设置官方源
  • 登录
  • 发布
  • 重设淘宝源

demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

{
  "name""@bryanadamss/drawing-board",
  "version""1.0.1",
  "description""canvas绘图板,提供绘制、撤销、旋转、下载等功能",
  "main""dist/drawing-board.es.js",
  "module""dist/drawing-board.es.js",
  "unpkg""dist/drawing-board.umd.js",
  "scripts": {
    "setNpmRegistry""npm config set registry https://registry.npmjs.org/",
    "setTaoBaoRegistry""npm config set registry https://registry.npm.taobao.org/",
    "prepublishOnly""npm run build && npm run setNpmRegistry",// 发布前构建、设置npm源
    "postpublish""npm run setTaoBaoRegistry",// 发布后,重设为淘宝源
    "build""rollup --config rollup.config.js",
    "release""standard-version",
    "release:first""npm run release --first-release",
    "publishToNpm""git push --follow-tags origin master && npm publish --access=public"
  },
  "repository": {
    "type""git",
    "url""git+https://github.com/BryanAdamss/drawing-board.git"
  },
  "keywords": [
    "canvas",
    "drawing",
    "paint"
  ],
  "author""GuangHui",
  "license""ISC",
  "devDependencies": {
    "@babel/core""^7.5.5",
    "@babel/plugin-proposal-class-properties""^7.5.5",
    "@babel/preset-env""^7.5.5",
    "core-js""^3.2.1",
    "rollup""^1.20.3",
    "rollup-plugin-babel""^4.3.3",
    "rollup-plugin-babel-minify""^9.0.0",
    "rollup-plugin-commonjs""^10.1.0",
    "rollup-plugin-node-resolve""^5.2.0",
    "standard-version""^7.0.0"
  },
  "bugs": {
    "url""https://github.com/BryanAdamss/drawing-board/issues"
  },
  "homepage""https://github.com/BryanAdamss/drawing-board#readme",
  "dependencies": {}
}

项目链接