需要 npm 账号

  • 注册 npm 账号

  • 常用 npm 命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 登录 npm
    npm login

    # 发布 npm 包
    npm publish

    # 撤销发布整个包
    npm unpublish demo1 --force
    # 撤销发布指定版本
    npm unpublish demo1@1.0.0 --force

    # 撤销发布提醒
    npm deprecate demo1 "this project is deprecated"

手动上传 npm 包

  • 使用 npm init 初始化项目

  • package.json 中添加发布配置, 使包公开, 私有包需要付费

    1
    2
    3
    "publishConfig": {
    "access": "public"
    }
  • 完整 package.json

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {
    "name": "@zxiaosi/demo1",
    "version": "1.0.0",
    "main": "index.js",
    "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "",
    "license": "ISC",
    "description": "",
    "publishConfig": {
    "access": "public"
    }
    }
  • 建议 package.jsonname 加上 npm 账户前缀, 避免与其他包重名, 防止上传报错

  • 创建 index.js 文件 (与 package.jsonmain 路径一致)

    1
    2
    3
    !(function () {
    console.log('我是demo1测试包!');
    })();
  • 完整目录结构

    1
    2
    3
    -- demo1
    |-- index.js
    |-- package.json
  • 更换默认 npm 源 https://registry.npmjs.org/, 否则会一直提示登录!!!

    1
    npm config set registry https://registry.npmjs.org
  • 先执行 npm cache clean --force 删除缓存 (重要!)

  • 然后执行 npm login 登录 npm 账号 (这里需要游览器验证)

  • 最后执行 npm publish 发布 npm 包

  • 在 npm 官网查看发布的包

  • 发布成功后,可以通过 npm install @zxiaosi/demo1 安装包

  • 撤销发布的包

    1
    2
    3
    4
    # 撤销发布整个包
    npm unpublish demo1 --force
    # 撤销发布指定版本
    npm unpublish demo1@1.0.0 --force

使用 father 上传 npm 包

  • 当包比较复杂时,可以使用 father 来打包上传

  • 使用 father 创建项目

    1
    npx create-father [项目名]

  • 完整目录结构

  • 本地开发 npm run dev

  • 打包 npm run build

  • 登录 npm login

  • 发布 npm publish

报错参考

  • 代理相关

    • 关闭代理 npm config set proxy false

    • 或者设置自己的代理 npm config set proxy="http://host:port", 上传完之后再关闭

  • 清除 npm 缓存 npm cache clean --force

  • 参考报错码

    错误码说明
    E400需要提高版本号 package.json => version
    E402发布公有包, 私有包需要付费 publishConfig
    E403无权限发布包, 考虑包名是否重复!!!
    E404确保登录的用户账号正确 npm login
    E426npm 设置源的时候,要设置成 https 协议

参考文章:【鸣谢】

一分钟教你发布 npm 包