发布
发布标签
npm 支持为版本打上标签,这叫做发布标签(dist-tag)。如果不指定发布标签,默认就是latest
。用户下载模块时,默认安装的就是latest
标签指向的版本。
新发布的版本,如果不希望用户默认安装,就需要自己指定标签。举例来说,某个模块的最新版本是4.6.12,但是有些用户还在使用老版本3.2.13。现在,你修正了一些老版本的 bug,发了一个新版本3.2.14。如果不指定发布标签,3.2.14的发布标签就是latest
,因为它是最新发布的。
这导致的后果就是,用户执行下面的命令,进行默认安装时,会出现非预期的结果。
执行上面命令时,用户会默认安装3.2.14,而不是4.6.12。因为latest
标签指向3.2.14。
解决方法就是,发布3.2.14的时候,为它打上一个发布标签。这样,3.2.14就不会占用latest
标签。
执行上面的命令后,3.2.14的发布标签就是previous
。
安装时,必须指定这个标签,才能安装到3.2.14。
上面的命令的两种语法都可以指定标签名。由于latest
是默认标签,所以可以省略。
一种常见的做法是,发布下一个大版本时,指定它的发布标签为next
。
这样的话,用户默认安装的还是主流版本,但是愿意尝鲜的用户,可以使用新版本。
等到新版本足够可靠以后,再把latest
标签指定到新版本。
如果希望把默认的发布标签改掉,不再是latest
,可以写在package.json
里面。
上面的设置,可以使得发布新版本时,发布标签默认为next
。
常用的发布标签有stable
、beta
、dev
等等。
npm dist-tag 命令
npm dist-tag
命令用来管理发布标签。
npm dist-tag ls
用来列出所有的发布标签。如果不指定模块名,那么默认为当前模块。
npm dist-tag add
用来为一个版本指定发布标签。
npm dist-tag rm
用来移除一个发布标签。
.gitignore,.npmignore
如果当前项目的根目录下有.gitignore
文件,该文件里面的路径不会打包进入 npm 模块。
如果有.npmignore
文件,那么 npm 将忽略.gitignore
文件,不将.npmignore
文件里面的路径打包进入 npm 模块。如果有些文件不希望进入 npm 模块(比如测试用例),但是希望进入 Git 仓库,那么可以使用.npmignore
。
此外,package.json
的files
字段,也可以用来排除进入 npm 模块的文件。
npm 会最优先排除files
字段里面的文件。另外,无论如何设置,package.json
文件都会进入 npm 模块。
npm pack 命令
npm pack
命令用来打包当前项目,打包后的文件会在当前目录下生成,文件名为<name>-<version>.tgz
。
如果多次运行该命令,每次生成的包将覆盖前一次的包。
npm pack
可以接受路径作为参数,打包该路径下的模块。如果没有提供任何参数,将打包当前目录。
--dry-run
参数会输出打包的内容,而不生成打包文件。
参考链接
- One simple trick for JavaScript package maintainers, by Stephan Bönnemann