![](/img/trans.png)
[英]Webpack output file to have exports default instead of module.exports
[英]Use export default in .eslintrc.js file instead of module.exports
我想在我的.eslintrc.js
文件中使用export default obj
而不是module.exports = obj
,因为代码库中的其他地方我们都在使用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
要在 ESLint 配置文件中使用 ES2015 语法进行默认导出,可以将 Babel 用于转译和 Pirates 用于钩子的组合来劫持导入 ES2015 编写的 ESLint 配置文件的require
语句。 请允许我解释一下。
通常,ESLint 会在项目根目录中寻找一个.eslintrc.js
文件,它通常由 Node.js 解析而不使用 Babel。 我们将重新利用这个文件,让它做两件事:注册一个钩子和导入 ES2015 ESLint 配置文件。
假设你已经有一个.eslintrc.js
使用ES2015默认的导出语法,切内容指出,文件并将其粘贴到一个新的文件名为.es2015lintrc.js
或相似。 名称无关紧要; 它可以被称为任何你想要的。
// .es2015lintrc.js
export default {
// ESLint config properties...
}
请确保您有@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
}
);
然后使用require
语句将此模块导入原始.eslintrc.js
并注册钩子,该钩子可以劫持和转换所有使用未来的require
语句导入的文件。 最后,可以使用我们劫持的require
语句导入以 ES2015 语法编写的 ESLint 配置文件。
// .eslintrc.js
const registerHook = require('./hook');
registerHook();
module.exports = require('./.es2015lintrc').default;
现在你应该可以走了! 在用 ES2015 语法编写 Babel 配置时也可以使用相同的方法。 享受!
如果您已经安装了@babel/register
,那么只需将您的.eslintrc.js
重命名为.eslintrc.babel.js
(或您喜欢的任何名称)并将其添加到.eslintrc.js
:
require('@babel/register')
module.exports = require('./.eslintrc.babel.js').default
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.