一般软件如果开源之后,需要经常维护和推送npm包,但是使用起来却一知半解,基础的包推送只懂得login/publish,今天我们就详细介绍真对个人和组织的发包流程,以及如何控制希望用户安装稳定和beta版本的包,达到开发和测试两不误的效果。

如何发布一个Npm包

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

镜像管理

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

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

否则, 可能会存在推送包异常的问题,这里,推荐使用 nrm 进行镜像的管理。
当然,也可以在 package.json 中置一下你想要的发布的地址:

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

发包流程

1. 登录npm账号

  1. $ npm login

2. 推送npm包

  1. $ npm publish

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

如何推送一个组织Npm包

要推送组织npm包,需要先去npm网站上创建一个属于自己的组织或加入其他人的组织,当加入组织后,可以在个人信息也看到组织的信息:
image.png
当前已经创建好一个名为 xylink 的组织,接下来我们开始调整并推送一个针对组织的npm包。

1. 修改包名

为了推送组织包,需要在 package.json 中的 name 属性修改为:@<your_org_name>/<package_name>,例如:

  1. {
  2. "name": "@xylink/xy-test-module"
  3. }

2. 推送public npm包

当设置好了组织和包名后,需要推送对应的包,此时,可以推送private包或者public包,在npm的网站里面,推送private 包需要付费才可以推送,所以需要推送private 包的同学,需要付费或者自行搭建私有的npm包管理器。我们这里讨论推送public 包:

  1. $ npm publish --access public

可以看到,要推送组织包,需要在 public 命令加 access 参数为 public,代表将此包推送到公网的npm网站上。推送完成后,可以看到:
image.png
可以看到,当前组织里面已经有了这个包软件信息:
image.png

版本管理

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

如果我们发布先行版本,npm version prepatch 命令得出的版本号好像就不够规范了,我们只能使用 npm version 1.0.0-alpha.1 指定版本号,不过,在 npm 6.4.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