web-dev-qa-db-ja.com

BabelとWebpackが「 'regenerator-runtime / runtime'を解決できません」をスローする

IE11互換(ため息)である必要があるブラウザーベースのプロジェクトに取り組んでいます。 Webpackがasync/awaitで窒息しています。これが私のコンソールの出力です:

Based on your code and targets, added regenerator-runtime.
...
Module not found: Error: Can't resolve 'regenerator-runtime/runtime'

私はmany SO質問と同様に、運がよかったので調べました。多くの人が@babel/polyfillの使用を推奨しています。

この問題の原因は何ですか? regenerator-runtime/runtimeを手動でインポートすることで修正できると思いますが、babel-envの主なセールスポイントの1つは、手動でポリフィルをインポートする必要がないため、ステップがないと思います。ありがとうございました!

これが私が実行しようとしているものです別のファイルにインポートされています:

class Fetcher {
    constructor() {
        this.form = document.querySelector('form');
        this.form.addEventListener('submit', this.onSubmit.bind(this));
    }

    async onSubmit(event) {
        event.preventDefault();

        const apiResponse = await fetch(`${WP_url}/api`);
        const apiJson = await apiResponse.json();
        console.log(apiJson);
    }
}
export default Fetcher;

webpack.config.js

const path = require('path');

function pathTo(filepath) {
    return path.join(__dirname, filepath);
}

module.exports = function(env, argv) {
    const isProd = Boolean(argv.mode === 'production');

    const config = {
        entry: {
            index: [
                pathTo('index.js'),
            ],
        },
        externals: {
            jquery: 'jQuery',
        },
        module: {
            rules: [
                {
                    test: /\.js$/,
                    exclude: /node_modules/,
                    loader: 'babel-loader',
                    options: {
                        presets: [
                            [
                                '@babel/preset-env',
                                {
                                    corejs: 3,
                                    debug: true,
                                    targets: {
                                        browsers: [
                                            'IE 11',
                                        ],
                                    },
                                    useBuiltIns: 'usage',
                                },
                            ],
                        ],
                    },
                },
            ],
        },
        optimization: {
            minimize: isProd,
        },
        output: {
            filename: '[name].js',
            path: pathTo('web'),
        },
    };

    return config;
};

package.json

{
  "private": true,
  "dependencies": {
    "core-js": "^3.4.1",
    "focus-within-polyfill": "^5.0.5"
  },
  "devDependencies": {
    "@babel/core": "^7.7.2",
    "@babel/preset-env": "^7.7.1",
    "babel-eslint": "^10.0.3",
    "babel-loader": "^8.0.6",
    "css-loader": "^3.2.0",
    "eslint": "^6.6.0",
    "mini-css-extract-plugin": "^0.8.0",
    "node-sass": "^4.13.0",
    "sass-loader": "^8.0.0",
    "webpack": "^4.41.2",
    "webpack-cli": "^3.3.10"
  },
  "scripts": {
    "dev": "webpack --mode=development --display-modules",
    "dev:watch": "npm run dev -- --watch",
    "prod": "webpack --mode=production --display-modules",
    "prod:watch": "npm run prod -- --watch"
  }
}
2
RobertAKARobin

公式 ドキュメント に続いて:

  1. 必要なパッケージをインストールします。
npm install --save-dev @babel/plugin-transform-runtime
npm install --save @babel/runtime

  1. 設定ファイルにプラグインを追加します。
{
  "plugins": ["@babel/plugin-transform-runtime"]
}

これは公式に推奨される方法であり、前述の ドキュメント でより多く利用できます。

0
kcpr

Async/awaitがあるファイルにimport 'regenerator-runtime/runtime'を追加するだけです。

0
lewislbr