如何用ESLint/TypeScript ESLint禁止.js/.jsx文件进入代码库?
禁止纯JavaScript文件提交并支持绕过限制的实现方案
针对大规模JS转TS迁移场景,有两个现成的简便方案,无需自定义复杂脚本或规则:
方案一:利用ESLint内置规则 no-restricted-files
依托你已有的ESLint工具链即可快速实现:
- 在ESLint配置文件(如
.eslintrc.js)中添加规则:
module.exports = { rules: { "no-restricted-files": [ "error", { patterns: ["**/*.js", "**/*.jsx"] } ] } };
只要代码库中出现.js/.jsx文件,ESLint就会抛出错误,配合CI或pre-commit钩子即可阻止提交。
- 绕过限制的方法:
- 在需要保留的JS文件顶部添加禁用注释:
/* eslint-disable no-restricted-files */
- 或在ESLint配置中批量排除特定目录的文件:
module.exports = { overrides: [ { files: ["src/legacy/**/*.js"], rules: { "no-restricted-files": "off" } } ] };
方案二:结合lint-staged + Husky做提交前文件检查
如果希望更精准拦截提交行为,可通过pre-commit钩子直接检查文件类型:
- 安装依赖:
npm install husky lint-staged --save-dev
- 在
package.json中配置钩子:
{ "husky": { "hooks": { "pre-commit": "lint-staged" } }, "lint-staged": { "*.{js,jsx}": [ "bash -c 'echo \"Error: JS/JSX files are restricted. Use --no-verify to bypass if necessary.\" && exit 1'" ] } }
提交前若暂存区存在.js/.jsx文件,会直接抛出错误终止提交。
- 绕过限制的方法:
- 提交时添加参数跳过钩子:
git commit --no-verify -m "提交遗留JS文件"
- 也可自定义脚本,通过提交信息标记放行(如检测
[ALLOW_JS]):
#!/bin/bash COMMIT_MSG=$(git log --format=%B -n 1 HEAD) if [[ ! $COMMIT_MSG =~ \[ALLOW_JS\] ]]; then JS_FILES=$(git diff --cached --name-only | grep -E '\.(js|jsx)$') if [[ -n $JS_FILES ]]; then echo "Error: JS/JSX files are restricted. Add [ALLOW_JS] to commit message to bypass." exit 1 fi fi
将脚本保存为check-js-files.sh,替换lint-staged中的命令即可。
内容的提问来源于stack exchange,提问作者Eric Hasegawa
相关产品推荐
相关产品推荐

