Vin*_*rga 5 javascript export node.js eslint eslintrc
我想在我的文件中使用export default obj
而不是,因为我们在代码库中的其他任何地方都使用.module.exports = obj
.eslintrc.js
export
到目前为止没有运气,很难搜索这个问题。
我得到的错误:
> eslint src
Cannot read config file: src/.eslintrc.js
Error: Unexpected token export
src/.eslintrc.js:23
export default foo;
^^^^^^
SyntaxError: Unexpected token export
Run Code Online (Sandbox Code Playgroud)
小智 1
要在 ESLint 配置文件中使用 ES2015 语法进行默认导出,可以使用 Babel 进行转译和 Pirates 进行挂钩的组合来劫持导入以require
ES2015 编写的 ESLint 配置文件的语句。请允许我解释一下。
通常,ESLint 会在项目根目录中查找.eslintrc.js
文件,并且通常由 Node.js 解析,而不需要 Babel。我们将重新调整该文件的用途,使其执行两件事:注册挂钩和导入 ES2015 ESLint 配置文件。
假设您已经使用.eslintrc.js
ES2015 默认导出语法,从该文件中剪切内容并将其粘贴到名为.es2015lintrc.js
或类似名称的新文件中。名称无关紧要;它可以被称为任何你想要的东西。
// .es2015lintrc.js
export default {
// ESLint config properties...
}
Run Code Online (Sandbox Code Playgroud)
在继续之前,请确保您已安装@babel/preset-env
、@babel/core
、eslint
和pirates
软件包。接下来,创建一个定义您的挂钩及其行为的文件。为了简单起见,我们称之为hook.js
。
// hook.js
const {addHook} = require('pirates');
const {transform} = require('@babel/core');
module.exports = options =>
addHook(
function(source, filename) {
return transform(source, {
presets: [
[
'@babel/preset-env',
{
modules: 'cjs',
targets: {
node: process.versions.node
}
}
]
]
}).code;
},
{
exts: ['.js'],
ignoreNodeModules: true,
...options
}
);
Run Code Online (Sandbox Code Playgroud)
.eslintrc.js
然后使用语句将此模块导入到原始模块中require
,并注册用于劫持和转换使用未来语句导入的所有文件的钩子require
。最后,可以使用我们劫持的语句导入以 ES2015 语法编写的 ESLint 配置文件require
。
// .eslintrc.js
const registerHook = require('./hook');
registerHook();
module.exports = require('./.es2015lintrc').default;
Run Code Online (Sandbox Code Playgroud)
现在你应该可以走了!在使用 ES2015 语法编写 Babel 配置时也可以使用相同的方法。享受!