现在我们的业务越来越庞大,在开发过程中沉淀了很多组件,这些组件希望能应用到其他系统中,提高开发效率。如果从github中直接引用组件,在安装的时候容易出现问题,因此,我们把这些通用的组件托管到npm,维护和推送npm包即可。基础的包推送常用的是login/publish,今天我们就详细介绍针对个人和组织的发包流程,以及如何控制希望用户安装稳定和beta版本的包,达到开发和测试两不误的效果。

“推送组织NPM包”,点击右侧导航查看。

如何发布一个NPM包

包项目开发完成后,需要将此项目打包,发布到npm上,可以提供给开发者使用此包软件。那么如何将我们已经写好的npm包发布到npm网站上呢?

镜像管理

在下载上传包时,国内由于受到墙的因素,直接使用npmjs的镜像地址可能会很慢,很多开发者会将镜像设置为taobao镜像地址,可以加快获取包的速度。

  1. 推送公网npm包时,需要将npm镜像设置为npm镜像地址 https://registry.npmjs.org/
  2. 推送私有npm包时,需要将npm镜像设置为私有的npm地址目录上。

当然,也可以在 package.json 中置一下你想要的发布的地址:

  1. "publishConfig": {
  2. "registry": "http://registry.npmjs.org/"
  3. }

发包流程

  1. 在当前项目的目录下登陆NPM账号

    1. $ npm login
  2. 推送NPM包即可

    1. $ npm publish

    注意:在推送npm包时,每次推送的version必须比上次的版本要大,否则,会无法推送包。

如何推送一个组织NPM包

为方便查找和管理,建议我们的通用组件都放在noxfed的Organization下。可以用自己的账号登陆npm.org,加入组织noxfed或者@夏珊加入noxfed组织。加入组织后可以在个人页面看到组织信息。
https://www.npmjs.com/~hayleyxs
https://www.npmjs.com/settings/noxfed/packages
image.png
接下来我们开始调整和推送针对noxfed组织的包。

修改包名

为推送组织包,需要在package.json中修改name属性为:@/。例如:

  1. {
  2. "name": "@noxfed/connect-cas2"
  3. }

推送publish npm包

当设置好了组织和包名后,需要推送对应的包,此时,可以推送private包或者public包,在npm的网站里面,推送private 包需要付费才可以推送,所以我们这里讨论推送public包:

  1. $ npm publish --access public

可以看到,要推送组织包,需要在 public 命令加 access 参数为 public,代表将此包推送到公网的npm网站上。推送完成后,就可以看到npm网站上有包的信息了。

版本管理

npm的发包需要遵循语义化版本,一个版本号包含三个部分:<MAJOR.MINOR.PATCH>:

  1. npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]
  2. 'npm -v' or 'npm --version' to print npm version (6.4.1)
  3. 'npm view <pkg> version' to view a package's published version
  • MAJOR 表示主版本号,当你做了不兼容的API修改;
  • MINOR 表示次版本号,当你做了向下兼容的功能性新增;
  • PATCH 表示修订号,当你做了向下兼容的问题修正;

我们可以使用npm version 命令来自动修改版本号,比如:

  1. // version = v1.0.0
  2. $ npm version patch
  3. // v1.0.0-0 变为 v1.0.0
  4. // 再次执行变为 v1.0.1
  5. $ npm version prepatch
  6. // v1.0.2-0
  7. $ npm version minor
  8. // v1.1.0
  9. $ npm version preminor
  10. // 1.0.2-0 变为 1.1.0-0
  11. $ npm version major
  12. // v2.0.0
  13. $ npm version premajor
  14. // 1.0.2-0 变为 1.1.0-0
  15. // 1.1.0-0 变为 2.0.0-0
  1. $ npm version prerelease
  2. // package.json 中的版本号1.0.0变为 1.0.1-0
  3. // 再次执行
  4. // package.json 中的版本号1.0.1-0变为 1.0.1-1

一般来说还有先行版本,测试版本等,他们这样命名:

  • 3.1.0-beta.0
  • 3.1.0-alpha.0

如果我们发布先行版本,我们可以使用 --preid 参数:

  1. $ npm version prerelease --preid=alpha

通过上面的命令,我们可以方便的管理包软件的版本,以及先行版、测试版本的版本,接下来,我们发布一个测试版本,在需要发布的项目下执行:

  1. $ npm publish --tag <tag_name>

如果是针对组织推送的测试版本,则增加 access 参数:

  1. $ npm publish --tag beta --access public

如果你直接执行npm publish,那么即使你的版本号是-beta.n,默认会打上latest的标签,别人 install 的时候也会下载到。这个时候需要我们只要改一下tag:

  1. // 不小心发错了
  2. latest: 1.0.1-beta.0
  3. // 1.0.1-beta.0设置为beta
  4. $ npm dist-tag add <package_name>@1.0.1-beta.0 beta
  5. $ npm dist-tag add <package_name>@1.0.0 latest

安装NPM包

在推送完成组织、个人的latest、beta、alpha包后,如何安装相应的包软件呢?

默认安装

默认情况下,我们推送的是 latest 包,可以不指定包版本,直接安装即可,此时,安装的最新的 latest 包:

  1. $ yarn add <package_name>
  2. # 指定某一个version
  3. $ yarn add <package_name>@<version>
  4. # eg: yarn add xy-test-module@1.0.0,即安装版本是1.0.0的pck。

安装测试版本

在开发初期,需要进行安装使用测试、先行版本的包是,需要执行版本安装:

  1. $ yarn add <package_name>@tag_name

例如,我们需要安装 beta 版本的packge,可以执行:

  1. $ yarn add xy-test-module@beta

具体的测试、先行版信息,可以通过:

  1. $ npm dist-tag ls <package_name>

查看到。

NPM包管理

查看包的详细信息

  1. $ npm view <package_name>

会显示包的包的发布信息、依赖和版本等信息。

具体的版本tag

  1. $ npm dist-tag ls <package_name>

这个会显示版本tag信息。

发布哪些文件?

发布一个开源包软件时,需要考虑开发者的网络速度,尽可能的控制包软件的大小,可以通过将源码打包压缩、控制上传有效的文件,忽略上传无用的文件,达到压缩包大小的目的。

  1. 第一种方式是在 package.jsonfiles 字段来控制,files 字段的值是一个数组,你可以写具体文件名,也可以写目录,还支持 glob 模式。
  2. 第二种就是使用 .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