如何解决ESLint的@typescript-eslint/no-var-requires报错?
ESLint @typescript-eslint/no-var-requires 报错的解决方法
报错详情
- 涉及文件:
\helpers\getEnvCredentials.ts - 报错提示:
4:9 error Require statement not part of import statement @typescript-eslint/no-var-requires - 问题代码:
const dataCredentials = JSON.parse( JSON.stringify( require("../fixtures/credentials/" + env + "-credentials.json") ) );
符合规则的替代写法
方法1:使用ES模块动态import()(适配动态路径场景)
原代码是动态拼接文件路径,推荐用ES模块的动态import语法,注意这是异步操作,需要配合async/await:
async function getEnvCredentials(env: string) { // 动态导入JSON文件,默认导出为解析后的JSON对象 const credentials = await import(`../fixtures/credentials/${env}-credentials.json`); const dataCredentials = JSON.parse(JSON.stringify(credentials.default)); return dataCredentials; } // 调用示例(需在异步上下文内) // const credentials = await getEnvCredentials('dev');
方法2:静态import配合条件判断(适配固定环境分支场景)
如果env的可选值是固定的几个,可通过条件判断使用静态import,保持同步执行:
let dataCredentials: Record<string, any>; switch (env) { case 'dev': dataCredentials = JSON.parse(JSON.stringify(import('../fixtures/credentials/dev-credentials.json').default)); break; case 'prod': dataCredentials = JSON.parse(JSON.stringify(import('../fixtures/credentials/prod-credentials.json').default)); break; default: throw new Error(`Unsupported environment: ${env}`); }
规则说明
@typescript-eslint/no-var-requires规则旨在强制使用ES模块的import语法替代CommonJS的require调用,除非是在import语句中使用。上述两种写法都符合ESLint的规则要求。
内容的提问来源于stack exchange,提问作者simpleMan
相关产品推荐
相关产品推荐

