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
;