npmlint 是一个用来检查 package.json 文件的工具,它会按照最佳实践告诉你 package.json 是否缺少一些字段,或哪些字段的值不合适等。
在你需要 lint 的 package 目录中使用 npmlint,npmlint 会通过 findup-sync 从当前目录及其父目录中寻找最近的那个 package.json 文件,如果找到了就读取这个 json 文件,然后对它的字段进行分析。
作者在 rules 文件夹中定义了一些规则,默认会依据这些规则分析 package.json,用户也可以提供自定义规则。
有一个规则叫 missing-package-props,这里列出了一些建议字段,如果发现你的 package.json 没有,就会在检查结果中告诉你缺少了哪些字段。
const recommendedProps = [
	'name',
	'version',
	'description',
	'keywords',
	'author',
	'main',
	'files',
	'repository',
	'engines'
];
其他一些规则:
node-semver 判断 version 字段的值是否 valid;scripts 字段是否有子字段 prepublish,因为 ts 代码需要先 compile 为 js 代码,如果存在 dependencies.typescript 字段,还会提醒你 typescript 应该安装为 devDependency 而不是 dependency;scripts.test 会提醒你加上测试;npmlint 还有一个 reporters 文件夹,其实就是定义检测结果的输出格式和内容。用户可以指定自定义的 reporter,这个 reporter 可以是一个 npm 库。如果你提供了一个 npm 库给 get-reporter.js 函数,那它会使用 resolve 定位这个 npm 库所在的位置,并 require 进来。
这个项目用了几个我没用过的库:
findup-sync:在当前目录或其父目录,定位最近的某个文件,并返回这个文件的路径;glob:使用 glob pattern 匹配文件;resolve:提供 npm 库的名称,返回这个库入口文件的路径;semver:判断 version 字段是否符合要求;update-notifier:提醒升级 npm 库;sudo-block:提醒用户要用 root 权限执行命令;相关文章:
require.resolve,可以用 import.meta.resolve;