如何过滤 npm publish 的文件
发布于 8 年前 作者 popomore 14254 次浏览 来自 分享

在 npm publish 的时候你是如何过滤文件的呢?

一般模块目录下会存在一些文件或目录是不想被发布的,比如 coverage, node_modules,test 等,如果发布了这些文件,会让包的体积变大,导致下载缓慢。npm 内置了一些过滤的白名单,比如 node_modules,还会根据 .gitignore 进行过滤。

npm 还提供了两种方式让开发者过滤文件 npmignorepkg.files.

推荐 pkg.files

推荐使用 pkg.files 来过滤文件,和 npmignore 最大的差异就是使用白名单。npmignore 文件通过配置一个黑名单列表,当 npm publish 时这些文件不被发布。但是当新增配置文件或某些工具生成临时文件时,这个黑名单就会收到影响。

而 pkg.files 通过白名单的方式,只发布配置的文件或目录,比如

{
  "files": [
	  "index.js",
		"lib"
	]
}

你可以通过 pkgfiles 来查看真实被发布的文件。

自动生成 pkg.files

但有时候会发现漏配 pkg.files 的情况,导致使用的时候部分文件不存在。

你可以使用 ypkgfiles 来自动生成 pkg.files,直接运行 ypkgfiles 就可以了。

ypkgfiles 的原理非常简单,通过 main 入口找到所有的相对依赖,然后获取第一层的文件或目录就能生成 pkg.files 了。

ypkgfiles 还提供 --entry 参数来支持一些特定的场景,比如以下场景无法被 ypkgfiles 识别

  • 比如某个目录是模板文件,不是通过 require 加载的
  • mz 模块使用 require('mz/fs') 的方式,并且这个文件不被 main require。
  • egg 的目录是由 egg loader 加载的

使用 --entry 来添加这些文件或目录,比如 egg 项目

$ ypkgfiles --entry app --entry config --entry *.js

总结

最佳的目录结构是 index.js + lib,不要把过多的文件或目录放置到根目录,再配合 ypkgfiles 自动生成可以让发包更简单。

1 回复
回到顶部