当自己造了个小轮子希望在 NPM 包里跑起来, 怎么操作呢? 总结了一下流程, 和遇到的问题及解决方法, 以下操作基于 Mac 环境.
一, 准备事项
1, 保证本地全局安装了 Node.JS 环境
- $ node --version
- v11.0.0
如上示例, 能返回 node 版本就表示已经安装了, 如果没有, 请移步 Node.JS 官网安装.
2, 在 NPM 上发布包, 必须得有账号
前往 NPM 注册一个账号.
二, 开始
1, 登录
- $ NPM login
- Username: xiaohua
- Password:
- Email: (this IS public) xiaohua@outlook.com
如上, 在 iTerm2 中输入命令 NPM login, 然后就会让你输入用户名密码和一个公开的邮箱, 按照之前在 NPM 中注册的信息填写就行.
2, 创建 demo
- $ mkdir xiaohua && cd xiaohua
- $ NPM init
这里注意, 虽然是 demo, 但也要用 NPM init, 不要用快速默认的命令 NPM init -y, 会漏掉 keywords,GitHub 等信息, 如果用了 NPM init -y, 也要记得在项目的 package.JSON 中把相关信息补全.
$ touch index.JS
创建一个 index.JS 文件, 然后写上简单的一些内容就行.
- // index.JS
- const myname = "xiaohua";
- module.exports = myname;
3, 发布
准备就绪后, 就可以执行 NPM publish + 包名称进行发布了, 是不是很简单, 对! 就是这么简单.
$ NPM publish xiaohua
success.PNG
如上, 没有任何 ERROR 就发布成功了, 然后去 NPM 上搜索 xiaohua, 如下, 可以看到已经有了:
NPM.PNG
三, 注意事项
总结了下面几种发布失败的情况和注意事项, 供大家参考
1, 包名重复错误
- NPM ERR! code E403
- NPM ERR! 403 Forbidden - PUT http://registry.npmjs.org/koa - You do not have permission to publish "koa". Are you logged in as the correct user?
如上, 我发布一个名为 koa 的包, 报错, 很显然 koa 包已存在.
切记发布前先去 NPM 上搜一下自己的包名, 看是否有重复, 如果遇到上面提示, 修改下包名, 再去 NPM 搜一下, 确保没有这个包之后, 再发布.
2,NPM 仓库镜像错误
- NPM ERR! code E403
- NPM ERR! 403 Forbidden - PUT https://registry.npm.taobao.org/pengxiaohua - [no_perms] Private mode enable, only admin can publish this module
可以看到错误提示中 https://registry.npm.taobao.org 这个是淘宝的仓库镜像, 而不是 NPM 的仓库镜像, 需要更换成 NPM 仓库镜像. 发布前可以先查看本地默认仓库镜像, 如下:
- $ NPM config get registry
- > http://registry.npmjs.org/
如果 NPM config get registry 后, 返回的 http://registry.npmjs.org/, 则说明的对的, 如果返回如下:
- $ NPM config get registry
- > https://registry.npm.taobao.org/
这是淘宝镜像, 说明之前可能是安装过 cnpm, 设置了本地的默认仓库镜像是淘宝的. 需要修改本地仓库镜像, 如下操作:
$ NPM config set registry=http://registry.npmjs.org
再次执行 NPM login, 然后执行 NPM publish XXX 发布包.
如果发布成功后, 则再次将仓库地址设为淘宝镜像地址, 方便本地 cnpm 的使用.
$ NPM config set registry=https://registry.npm.taobao.org/
3, 包版本号 version 错误
- NPM ERR! code E400
- NPM ERR! 400 Bad Request - PUT http://registry.npmjs.org/xiaohua - Cannot publish over previously published version "1.0.0".
遇到这个问题, 修改 package.JSON 中 version 版本号, 避免和上一次发布重复, 再次发布就可以了.
4, 撤回发布的包
NPM 包 24 小时内可以强制撤回, 超过 24 小时的就不行了.
$ NPM --force unpublish xiaohua
如果发布同一个包 1 次以上 (即多个版本) 了, 那么就只能通过 NPM deprecate 去废弃包, 如下操作:
$ NPM deprecate xiaohua@1.0.1 "sorry, it's a my test npm package, I love Xiaxia && Ruoyu"
使用 NPM deprecate 时, 最后的 message 一定要带上, 否则执行失败.
5, 更新发布包
如果对已创建的包要更新, 更新后上传要修改项目的版本号, 即 package.JSON 中 version, 也可以在项目目录下执行 NPM version patch
这是我发布的 NPM 包 get-image-size, 根据图片的链接获取图片的文件大小, 欢迎大家在 GitHub 上 star 和提 issue.
来源: http://www.jianshu.com/p/5061ab305657