簡體   English   中英

在 .eslintrc.js 文件中使用導出默認值而不是 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/coreeslintpirates繼續之前安裝的軟件包。 接下來,創建一個定義鈎子及其行為的文件。 為簡單起見,我們將其稱為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM