一般软件如果开源之后,需要经常维护和推送npm包,但是使用起来却一知半解,基础的包推送只懂得login/publish,今天我们就详细介绍真对个人和组织的发包流程,以及如何控制希望用户安装稳定和beta版本的包,达到开发和测试两不误的效果。
如何发布一个Npm包
包项目开发完成后,需要将此项目打包,发布到npm上,可以提供给开发者使用此包软件。那么如何将我们已经写好的npm包发布到npm网站上呢?
镜像管理
在下载上传包时,国内由于受到墙的因素,直接使用npmjs的镜像地址可能会很慢,很多开发者会将镜像设置为taobao镜像地址,可以加快获取包的速度。
- 推送公网npm包时,需要将npm镜像设置为npm镜像地址
https://registry.npmjs.org/
- 推送私有npm包时,需要将npm镜像设置为私有的npm地址目录上。
否则, 可能会存在推送包异常的问题,这里,推荐使用 nrm
进行镜像的管理。
当然,也可以在 package.json
中置一下你想要的发布的地址:
"publishConfig": {
"registry": "http://registry.npmjs.org/"
}
发包流程
1. 登录npm账号
$ npm login
2. 推送npm包
$ npm publish
在推送npm包时,每次推送的version必须比上次的版本要大,否则,会无法推送包。
如何推送一个组织Npm包
要推送组织npm包,需要先去npm网站上创建一个属于自己的组织或加入其他人的组织,当加入组织后,可以在个人信息也看到组织的信息:
当前已经创建好一个名为 xylink
的组织,接下来我们开始调整并推送一个针对组织的npm包。
1. 修改包名
为了推送组织包,需要在 package.json
中的 name
属性修改为:@<your_org_name>/<package_name>
,例如:
{
"name": "@xylink/xy-test-module"
}
2. 推送public npm包
当设置好了组织和包名后,需要推送对应的包,此时,可以推送private包或者public包,在npm的网站里面,推送private 包需要付费才可以推送,所以需要推送private 包的同学,需要付费或者自行搭建私有的npm包管理器。我们这里讨论推送public 包:
$ npm publish --access public
可以看到,要推送组织包,需要在 public
命令加 access
参数为 public
,代表将此包推送到公网的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
如果我们发布先行版本,npm version prepatch
命令得出的版本号好像就不够规范了,我们只能使用 npm version 1.0.0-alpha.1
指定版本号,不过,在 npm 6.4.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
。