checkers 块位于 .lagune/configs.json 中,用来设定扫描文件的 hook 要跳过哪些内容,可以对所有 hook 统一设置,也可以单独设置某一个。
如何配置
在命令行中添加或移除路径和模式。模式要用引号括起来,这样 shell 才会原样保留:
npx lagune write add --ignore test/fixtures
npx lagune write add --ignore 'packages/*/dist' --checker secrets
npx lagune write remove --ignore test/fixtures
也可以直接写在文件里:
{
"checkers": {
"ignore": ["test/fixtures"],
"secrets": { "gitignore": false, "ignore": ["test/fixtures", "temp"] }
}
}
设置项
| 键 | 值 | 默认值 | 说明 |
|---|---|---|---|
gitignore | true 或 false | true | 跳过 Git 忽略的内容。Git 跟踪的文件无论如何都会扫描。 |
ignore | 从项目根目录开始的路径或模式 | [] | 跳过每一项匹配的内容及其下的所有内容,即使是 Git 跟踪的文件也会跳过。 |
写在 checkers 顶层的键对所有检查器生效。写在某个检查器名下的键只对该检查器生效,并取代共享的键,因此在上面的示例中,secrets 会扫描 Git 忽略的内容,并跳过 test/fixtures 和 temp。当 write add --ignore 第一次为某个检查器创建它自己的列表时,这个列表会先复制一份共享列表。
模式
模式从项目根目录开始匹配,因此 *.generated.ts 只匹配根目录下的文件,而 **/*.generated.ts 会匹配任意深度的文件。名称必须完全一致,包括大小写。
| 模式 | 跳过的内容 |
|---|---|
dist | 项目根目录下的 dist |
packages/*/dist | dist(位于 packages 下的每个文件夹中) |
**/dist | 任意深度的所有 dist |
**/*.generated.ts | 名称以 .generated.ts 结尾的所有文件 |
fixture-? | fixture-a、fixture-1 等 |
[ab]-cache | a-cache 和 b-cache |
[*]x | *x(其中 * 是字面字符) |
如何解读结果
报告末尾会按忽略来源列出扫描跳过了多少条路径:
Skipped 25 paths that Git ignores and 3 paths that .lagune/configs.json ignores. Name one with --dir or --file to scan it.
用 --dir 或 --file 指定的路径,无论设置如何都会扫描。如果引擎无法读取某个设置,检查器会报错并停止,错误信息会指出这个设置,例如以 ! 或空格开头、跳出项目范围、方括号未闭合,或匹配耗时过长的模式。
常见问题
不会。charter 会列出它解读项目后认为不属于你需要防护的代码的已提交文件夹,例如写得看起来存在漏洞的测试夹具,并且只记录你按编号选中的那些。
当这个仓库不值得你信任时(它自带的 .gitignore 文件可能会藏起代码),或者构建文件夹里可能带有构建时内联进去的密钥时。你可以为所有检查器或某一个检查器把 gitignore 设为 false。
