现在我们的业务越来越庞大,在开发过程中沉淀了很多组件,这些组件希望能应用到其他系统中,提高开发效率。如果从github中直接引用组件,在安装的时候容易出现问题,因此,我们把这些通用的组件托管到npm,维护和推送npm包即可。基础的包推送常用的是login/publish,今天我们就详细介绍针对个人和组织的发包流程,以及如何控制希望用户安装稳定和beta版本的包,达到开发和测试两不误的效果。
“推送组织NPM包”,点击右侧导航查看。
如何发布一个NPM包
包项目开发完成后,需要将此项目打包,发布到npm上,可以提供给开发者使用此包软件。那么如何将我们已经写好的npm包发布到npm网站上呢?
镜像管理
在下载上传包时,国内由于受到墙的因素,直接使用npmjs的镜像地址可能会很慢,很多开发者会将镜像设置为taobao镜像地址,可以加快获取包的速度。
- 推送公网npm包时,需要将npm镜像设置为npm镜像地址
https://registry.npmjs.org/ - 推送私有npm包时,需要将npm镜像设置为私有的npm地址目录上。
当然,也可以在 package.json 中置一下你想要的发布的地址:
"publishConfig": {"registry": "http://registry.npmjs.org/"}
发包流程
在当前项目的目录下登陆NPM账号
$ npm login
推送NPM包即可
$ npm publish
注意:在推送npm包时,每次推送的version必须比上次的版本要大,否则,会无法推送包。
如何推送一个组织NPM包
为方便查找和管理,建议我们的通用组件都放在noxfed的Organization下。可以用自己的账号登陆npm.org,加入组织noxfed或者@夏珊加入noxfed组织。加入组织后可以在个人页面看到组织信息。
https://www.npmjs.com/~hayleyxs
https://www.npmjs.com/settings/noxfed/packages
接下来我们开始调整和推送针对noxfed组织的包。
修改包名
为推送组织包,需要在package.json中修改name属性为:@
{"name": "@noxfed/connect-cas2"}
推送publish npm包
当设置好了组织和包名后,需要推送对应的包,此时,可以推送private包或者public包,在npm的网站里面,推送private 包需要付费才可以推送,所以我们这里讨论推送public包:
$ npm publish --access public
可以看到,要推送组织包,需要在 public 命令加 access 参数为 public,代表将此包推送到公网的npm网站上。推送完成后,就可以看到npm网站上有包的信息了。
版本管理
npm的发包需要遵循语义化版本,一个版本号包含三个部分:<MAJOR.MINOR.PATCH>:
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]'npm -v' or 'npm --version' to print npm version (6.4.1)'npm view <pkg> version' to view a package's published version
- MAJOR 表示主版本号,当你做了不兼容的API修改;
- MINOR 表示次版本号,当你做了向下兼容的功能性新增;
- PATCH 表示修订号,当你做了向下兼容的问题修正;
我们可以使用npm version 命令来自动修改版本号,比如:
// version = v1.0.0$ npm version patch// v1.0.0-0 变为 v1.0.0// 再次执行变为 v1.0.1$ npm version prepatch// v1.0.2-0$ npm version minor// v1.1.0$ npm version preminor// 1.0.2-0 变为 1.1.0-0$ npm version major// v2.0.0$ npm version premajor// 1.0.2-0 变为 1.1.0-0// 1.1.0-0 变为 2.0.0-0
$ npm version prerelease// package.json 中的版本号1.0.0变为 1.0.1-0// 再次执行// package.json 中的版本号1.0.1-0变为 1.0.1-1
一般来说还有先行版本,测试版本等,他们这样命名:
- 3.1.0-beta.0
- 3.1.0-alpha.0
如果我们发布先行版本,我们可以使用 --preid 参数:
$ npm version prerelease --preid=alpha
通过上面的命令,我们可以方便的管理包软件的版本,以及先行版、测试版本的版本,接下来,我们发布一个测试版本,在需要发布的项目下执行:
$ npm publish --tag <tag_name>
如果是针对组织推送的测试版本,则增加 access 参数:
$ npm publish --tag beta --access public
如果你直接执行npm publish,那么即使你的版本号是-beta.n,默认会打上latest的标签,别人 install 的时候也会下载到。这个时候需要我们只要改一下tag:
// 不小心发错了latest: 1.0.1-beta.0// 将1.0.1-beta.0设置为beta$ npm dist-tag add <package_name>@1.0.1-beta.0 beta$ npm dist-tag add <package_name>@1.0.0 latest
安装NPM包
在推送完成组织、个人的latest、beta、alpha包后,如何安装相应的包软件呢?
默认安装
默认情况下,我们推送的是 latest 包,可以不指定包版本,直接安装即可,此时,安装的最新的 latest 包:
$ yarn add <package_name># 指定某一个version$ yarn add <package_name>@<version># eg: yarn add xy-test-module@1.0.0,即安装版本是1.0.0的pck。
安装测试版本
在开发初期,需要进行安装使用测试、先行版本的包是,需要执行版本安装:
$ yarn add <package_name>@tag_name
例如,我们需要安装 beta 版本的packge,可以执行:
$ yarn add xy-test-module@beta
具体的测试、先行版信息,可以通过:
$ npm dist-tag ls <package_name>
查看到。
NPM包管理
查看包的详细信息
$ npm view <package_name>
具体的版本tag
$ npm dist-tag ls <package_name>
发布哪些文件?
发布一个开源包软件时,需要考虑开发者的网络速度,尽可能的控制包软件的大小,可以通过将源码打包压缩、控制上传有效的文件,忽略上传无用的文件,达到压缩包大小的目的。
- 第一种方式是在
package.json里files字段来控制,files字段的值是一个数组,你可以写具体文件名,也可以写目录,还支持glob模式。 - 第二种就是使用
.npmignore配置文件,他类似于.gitignore文件,其实如果没有.npmignore,会使用.gitignore来取代他的功能。在包的根目录下,.npmignore不会覆盖files字段,但在子目录中会覆盖。
有些文件不能无法通过配置排除或者包含:
- package.json
- README
- CHANGES / CHANGELOG / HISTORY
- LICENSE / LICENCE
- NOTICE
- main字段中的文件
以上文件无法忽略。
- .git
- CVS
- .svn
- .DS_Store
- ._*
以上文件无法发布到 npm。
参考:
https://www.yuque.com/jinghui/yq8yzr/az65og?language=en-us
