使用ESLint no-restricted-properties限制特定环境变量失败如何解决?
解决ESLint限制
process.env.SUPERBASE_PRIVATE_SERVICE_ROLE无效的问题 你的配置失效的核心原因是no-restricted-properties规则的property字段只能指定单个层级的属性名,没法识别嵌套的env.SUPERBASE_PRIVATE_SERVICE_ROLE。这个规则本来就是用来限制object.property这种单层属性访问的,嵌套属性不在它的处理范围内。
方法一:用no-restricted-syntax规则(推荐)
这个规则能通过AST选择器精准匹配嵌套的属性访问,配置如下:
"no-restricted-syntax": [ "error", { "selector": "MemberExpression[object.object.name='process'][object.property.name='env'][property.name='SUPERBASE_PRIVATE_SERVICE_ROLE']", "message": "禁止在非指定位置使用process.env.SUPERBASE_PRIVATE_SERVICE_ROLE" } ]
这个选择器会精准匹配process.env.SUPERBASE_PRIVATE_SERVICE_ROLE的访问,只要代码里出现这个变量,就会触发ESLint错误。
方法二:结合no-restricted-properties(可选)
如果一定要用no-restricted-properties,可以这么配置,但这种方式依赖ESLint对process.env的识别,可能存在失效风险:
"no-restricted-properties": [ "error", { "object": "process.env", "property": "SUPERBASE_PRIVATE_SERVICE_ROLE", "message": "禁止在非指定位置使用process.env.SUPERBASE_PRIVATE_SERVICE_ROLE" } ]
允许特定文件使用的技巧
要是需要让某些特定文件(比如项目配置文件)合法使用这个变量,可以在文件顶部加ESLint注释来临时禁用规则:
// 精准禁用对应的规则项 /* eslint-disable no-restricted-syntax: ["error", {"selector": "MemberExpression[object.object.name='process'][object.property.name='env'][property.name='SUPERBASE_PRIVATE_SERVICE_ROLE']"}] */ // 或者直接禁用整个规则(不推荐,范围太广) /* eslint-disable no-restricted-syntax */
内容的提问来源于stack exchange,提问作者Shivam Sahil
相关产品推荐
相关产品推荐

