场景:开发一个库foobar,在app中测试和使用。
方案一:link
将开发中的foobar link到全局,然后在app中通过link安装。
cd path/to/foobar
npm link
cd path/to/app
npm link foobar
然后就可以按正常流程编译和使用了。
缺陷:
- 由于foobar的实际路径不在node_modules中,可能会被webpack强制进行二次编译,出现意外的问题。
方案二:publish
发布一个测试版。
cd path/to/foobar
npm version [ premajor | preminor | prepatch | prerelease | 1.0.0-alpha.0 ]
npm publish --tag next
cd path/to/app
npm install foobar@next
如果不传--tag next
,则相当于用了--tag latest
。
为了防止发布的时候忘记加tag,可以在package.json
里加上:
{
"publishConfig": {
"tag": "next"
}
}
然后就跟使用正式版的流程没有什么区别了。
缺陷:
- 每次改动都需要重新发版。
附:正式发布
# 附:正式发布
cd path/to/foobar
npm version [ major | minor | patch | 1.0.0 ]
npm publish
# 使用正式版
cd path/to/app
npm install foobar@*
附:几点建议
- 不要将强大的
npm version
和npm publish
写死到npm命令中。 - 可以通过
preversion
和prepublish
等钩子来实现一些前置或后置操作,从而避免上一条中提到的情况。
为了方便使用,可以这样配置foobar/package.json
:
{
...
"scripts": {
...
"prepublish": "npm run ci && npm run build"
}
}
网友评论