在开始之前, 先去注册一个 NPM 账号 https://www.npmjs.com/signup , 如果没有的话
发布 NPM 公开包
创建项目
建项目文件夹
先建一个工程文件夹或者拉取远程 Git 上的已有项目
mkdir my-test-project
初始化 Git
进入该文件夹, 先初始化 Git(如果还没有的话), 用于版本控制. 在 GitHub(也可以其他) 上新建一个与项目同名的远程仓库, 并添加 README.md 文件, 拷贝仓库地址, 如:
- Git@GitHub.com:username/test-pro.gitgit init
- Git remote add origin Git@GitHub.com:usename/test-pro.Git
- Git push -u origin master
这样就把本地仓库和远程仓库关联起来了
初始化 NPM
在项目根目录下即 my-test-project 目录下执行, NPM init, 然后根据提示填写相关信息, 有些可以略过后续修改. 要注意的是 name 字段, 有几个点要提醒:
这个是唯一的, 不能和 NPM 上所有已有的包重名, 否则在 publish 的时候回会提示权限错误
- NPM ERR! You do not have permission to publish "my-test-project".
- Are you logged in as the correct user? : my-test-project
另外命名也有规范, 不能出现下划线, 大写字母, 空格等字符, 可以有连字符 (中划线)
先写好 index.JS 文件, 作为测试, 在里面写几行简单代码, 并 export 一个默认变量
发布
先登录 NPM 用户, 执行
- NPM adduser // or NPM login
- Username: NPM-user-name
- Password:
- Email: your-email
根据提示输入正确的 NPM 用户名, 密码, 邮箱, 添加完后会默认登录
执行
NPM publish
如果没什么问题, 应该就发布成功了. 可以去 NPM 搜索发布的包: my-test-project, 或者去自己的 NPM 账号下查看 package
关于测试
publish 前测试
在 NPM init 完成之后, 就可以作为一个依赖包供其他模块引用. 根据上面的例子, 把 my-test-project 文件夹放入另外的测试工程 node_modules 文件夹下面, 这样就可以跟引入其他模块一样, 引入之前在 index.JS 里面 export 的测试变量, 如
- // my-test-project 下的 index.JS
- const a = 'this is a test'
- export default a // or module.exports = a
- // 引用
- import a from 'my-test-project' // or const a = require('my-test-project')
建议先测试完, 没有问题再 publish
publish 后测试是否有问题
publish 后就更好办了, 直接像安装其他模块一样通过 NPM i 命令安装, 然后引用
更新已发布的包
更新包和发布包的命令是一样的, 更新包只需修改 package.JSON 里面的 version 字段, 也可以使用 NPM 自带的版本控制命令修改版本号, 更新的步骤为:
修改版本号
- NPM publish
- NPM version
NPM 提供官方提供了 NPM version 来进行版本控制, 其效果跟手动修改 package.JSON 里面的 version 字段是一样的, 好处在于, 可以在构建过程中用 NPM version 命令自动修改, 而且具有语义化即 Semantic versioning.
- NPM version [<newversion> | major | minor | patch | premajor | preminor |
- prepatch | prerelease | from-Git]
其语义为:
major: 主版本号 (大版本)
minor: 次版本号 (小更新)
patch: 补丁号 (补丁)
premajor: 预备主版本
preminor: 预备次版本
prepatch: 预备补丁版本
prerelease: 预发布版本
如初始版本为 1.0.0, 执行相关类型命令后, 对应的语意为:
- NPM version patch // 1.0.1 表示小的 bug 修复
- NPM version minor // 1.1.0 表示新增一些小功能
- NPM version mmajor // 2.0.0 表示大的版本或大升级
- NPM version preminor // 1.1.0-0 后面多了个 0, 表示预发布
可以在当前模块的 package.JSON 里面看到相应的版本变化
撤销发布
由于撤销发布会让把要撤销的包作为依赖的包不能正常工作, 所以 NPM 官方对包的撤销是有限制的:
不允许撤销发布已经超过 24 小时的包 (unpublish is only allowed with versions published in the last 24 hours)
如果在 24 小时内确实要撤销, 需要加 --force 参数
即使撤销了发布的包, 再次发布的时候也不能与之前被撤销的包的名称 / 版本其中之一相同, 因为这两者构成的唯一性已经被占用, 官方并没有随着撤销而删除
NPM unpublish
撤销发布的命令为 NPM unpublish
- NPM unpublish my-test-project
- // 报错
- NPM ERR! Refusing to delete entire project.
- NPM ERR! Run with --force to do this.
- NPM ERR! NPM unpublish [<@scope>/]<pkg>[@<version>]
- // 加 --force 参数重新撤销发布
- NPM unpublish my-test-project --force
- NPM WARN using --force I sure hope you know what you are doing.
- - my-test-project
NPM deprecate
NPM unpublish 的推荐替代命令:
NPM deprecate <pkg>[@<version>] <message>
这个命令, 并不会在 NPM 上里撤销已有的包, 但会在任何人尝试安装这个包的时候得到 deprecated 的警告, 例如:
NPM deprecate my-test-project 'this package is no longer maintained'
参考:
Creating and publishing unscoped public packages
[NPM] 利用 NPM 安装 / 删除 / 发布 / 更新 / 撤销发布包 http://www.cnblogs.com/penghuwan/p/6973702.html
版本号管理策略 && 使用 NPM 管理项目版本号
来源: https://juejin.im/post/5c5012926fb9a049d37f81e1