NPM包发布与管理
发布到官方NPM仓库
首先需要在NPM官网创建一个账号
然后通过
npm login
登录账号创建一个项目文件夹,通过
npm init
初始化,修改package.json里的项目信息,添加README.md.(已有项目的跳过)通过
npm publish
发布(包名不能与现有的包重名或者非常接近)
使用nrm进行npm镜像源管理
发布包的时候,可能需要在各种npm库之间切换,通过nrm可以快速的实现这个需求。
安装
1 | yarn global add nrm |
使用
1 | nrm ls #列出nrm管理的registry列表 |
2 | nrm current #显示当前的registry名称 |
3 | nrm use taobao #切换registry到taobao源,这个命令对yarn和npm同时生效 |
4 | nrm add taobao https://registry.npm.taobao.org #添加一个名为taobao的源到列表 |
5 | nrm del taobao #从列表中删除taobao源 |
通过lerna进行包代码管理
lerna init
初始化
1 | mkdir lerna-repo && cd $_ |
2 | npx lerna init |
将会创建一个 lerna.json
配置文件和一个packages
文件夹,目录结构大概这样:
1 | lerna-repo/ |
2 | packages/ |
3 | package.json |
4 | lerna.json |
在packages
里添加module并通过npm init
初始化
1 | mkdir packages/lerna-demo-core && cd packages/lerna-demo-core |
2 | npm init |
lerna bootstrap
通过lerna bootstrap
处理依赖
lerna bootstrap
会安装并处理package之间的依赖问题,比如packages/lerna-demo-module-a
依赖了packages/lerna-demo-core
,bootstrap
会在lerna-demo-module-a
的node_modules
目录下建立指向lerna-demo-core
的软链接。
1 | lerna add lerna-demo-core --scope=lerna-demo-module-a |
此处有个活生生的例子
lerna publish
发布当前项目中的包。
如果有package发生变更的话,会让你选择一个新的版本号,然后就可以发布了。
这里有个不好的地方是,如果发布包失败,也无法重试发布,必须删除这个tag,然后回退版本变更的commit才可以重新发布。
版本管理方式
Lerna 提供两类管理项目的模式: Fixed 和 Independent.
- Fixed/Locked mode (default)
Fixed模式下,项目通过单一的版本进行控制。版本号放在项目根目录下的lerna.json文件的version这个字段。当你执行 lerna publish,如果有文件更新,它将发布新的版本。
babel项目采用的就是这种模式 - Independent mode (–independent)
这种模式下,项目里的各个package独立维护自己的version,它将会忽略lerna.json中定义的version