npm publish那些事

栏目: 编程工具 · 发布时间: 5年前

内容简介:在我们写完一个应用程序后,需要发布到npm上,大多数人可能仅仅使用在下载包的时候,很多人喜欢设置也可以设置别名

在我们写完一个应用程序后,需要发布到npm上,大多数人可能仅仅使用 npm publish 就完成了,我这里讲一下如何更好的发布包。

registry

在下载包的时候,很多人喜欢设置 taobao 镜像,因为 npm 仓库服务器在国外,下载速度真是急死个人,淘宝镜像每10分钟同步一次 Npm 上的包。发布的时候也一样,一般开源应用基本都发布到 npmjs ,公司内部包的话就会发到私有 Npm 仓库,我们可以在 package.json 设置一下你想要的发布的地址:

"publishConfig": {
    "registry": "http://registry.npm.xxx.com/"
 }

也可以设置别名

alias ynpm="npm --registry=http://registry.npm.xxx.com"
// 发布的时候
ynpm publish

权限相关

发布包需要验证你的账号权限,第一次执行 npm adduser ,后面就只需要 npm login 了。有时候我们遇到说你用户名密码错误,但实际并没错,可能是因为你的 registry 设置成了淘宝镜像的url,npm配置可以前往 ~/.npmrc 查看,可以通过 npm config delete registry 删除掉。如果你需要一个人帮你一起发包,可以使用 npm owner add <user> [<@scope>/]<pkg> 去添加一个用户,不过最好还是把发布权限收紧,其他人提MR,包的 owner 进行 code review ,然后发包。

发布哪些文件

发布一个包,考虑到别人的下载速度,包体积肯定需要尽量小,所以源文件最好不包括,那如何控制只发哪些文件呢?

第一种方式是在 package.jsonfiles 字段来控制, files 字段的值是一个数组,你可以写具体文件名,也可以写目录,还支持 glob 模式。

第二种就是使用 .npmignore 配置文件,他类似于 .gitignore 文件,其实如果没有 .npmignore ,会使用 .gitignore 来取代他的功能。在包的根目录下, .npmignore 不会覆盖 files 字段,但在子目录中会覆盖。

有些文件不能无法通过配置排除或者包含:

  • package.json
  • README
  • CHANGES / CHANGELOG / HISTORY
  • LICENSE / LICENCE
  • NOTICE
  • main字段中的文件

以上文件无法忽略。

  • .git
  • CVS
  • .svn
  • .DS_Store
  • ._*
  • 等等

以上文件无法发布到 npm

版本管理

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

  • MAJOR 表示主版本号,当你做了不兼容的API修改;
  • MINOR 表示次版本号,当你做了向下兼容的功能性新增;
  • PATCH 表示修订号,当你做了向下兼容的问题修正;

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

// version = v1.0.0
npm version patch
// v1.0.1
npm version prepatch
// v1.0.2-0
npm version minor
// v1.1.0
npm version major
// v2.0.0

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

  • 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

Changelog

包发布了很多次后,使用者升级就需要知道他是否需要升级,需要查看文档看看有哪些不兼容性改动,所以需要一个 Changelog 来记录每次发布改了些什么。如果收到的维护肯定会有忘记的时候,所以需要使用 工具 来自动生成,我们可以使用 standard-version 这个包来生成,这个包的作用是自动更新版本和生成 CHANGELOG

standard-version --prerelease alpha
✔ bumping version in package.json from 3.0.2-0 to 3.0.2-alpha.0
✔ created CHANGELOG.md
✔ outputting changes to CHANGELOG.md
✔ committing package.json and CHANGELOG.md
✔ tagging release v3.0.2-alpha.0
ℹ Run `git push --follow-tags origin master && npm publish --tag alpha` to publish
// 再看下生成的Changelog

### Bug Fixes

* 添加功能1 75e2808

### [3.0.2-alpha.0](///compare/v3.0.2-0...v3.0.2-alpha.0) (2019-06-18)

有了这个工具我们都不需要使用 npm version prepatch 了。 standard-version 会根据你的 git commit 信息,自动生成日志,比如新增啥啥功能,修复啥啥啥bug。自动生成的同时,也就意味着你 git commit 需要遵循一定格式,比如:

  • feat: A new feature
  • fix: A bug fix
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-co
    lons, etc)
  • refactor: A code change that neither fixes a bug nor adds a feature
  • perf: A code change that improves performance

我们可以使用 commitlint 搭配 husky 来校验你commit的信息是否符合标准

{
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }  
  }
}

也可以使用交互式的方式来生成commit, commitizen 这个包就可以。

Tag

在说明npm的tag之前需要先将一讲git的tag:

git的tag

git上打标签我们应该比较熟悉,特别是开发sdk或者APP软件的同学。我们在使用 npm version prepatch 的时候就会默认执行一次 git tag version ,我们也可以手动打一个标签 git tag -a <tag名> -m <注释文字> ,通过 git push — tags origin master 将标签推到远程。

npm的tag

我们可以通过 npm dist-tag ls [<pkg>] 来查看一个包的tag,一般来说我们至少会有三种类型的标签

  • latest:最后版本,npm install的就是这个
  • beta:测试版本,一般内测使用,需要指定版本号install,例如3.1.0-beta.0
  • next: 先行版本,npm install foo@next安装,例如3.0.2-alpha.0

如果我们需要发布一个测试版本,在发布的时候需要执行

npm publish --tag beta

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

// 不小心发错了
latest: 1.0.1-beta.0
// 将1.0.1-beta.0设置为beta
npm dist-tag add my-package@1.0.1-beta.0 beta
npm dist-tag add my-package@1.0.0 latest

这样就万事大吉了。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员第二步

程序员第二步

尹华山 / 人民邮电出版社 / 2013-11 / 45.00元

这本书是写给程序员和项目经理的。作者结合自身的丰富成长历程,通俗易懂地讲述了一名程序员如何才能成为一名优秀的项目经理。内容涉及职业规划、学习方法、自我修炼、团队建设、项目管理等,书中理清了项目管理领域中典型的误区及具有迷惑性的观点,并对项目中的难点问题提出了针对性的解决方法。 全书行文流畅,严谨中带着活泼,理智中透着情感,给读者带来轻松愉快的阅读感受。书中诸多富有创见的观点,让人耳目一新,引......一起来看看 《程序员第二步》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具