babel-preset-env编译js错误记录,async/await错误;

当项目中使用async和await时,使用babel-preset-env进行编译,翻译js时会出错。

错误信息为:Uncaught ReferenceError: regeneratorRuntime is not defined

翻译为的js代码大概如下所示,其中regeneratorRuntime为自动生成的变量,关键是该变量未进行定义,导致运行出错;内部转换机制暂未知。

var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(args, util) {

    ....

}

解决办法一:将babel-preset-env替换为babel-preset-es2015。

webpack.config.js配置:

        rules: [{
            test: /\.jsx?$/,
            loader: 'babel-loader',
            include: [path.resolve(__dirname, 'src'), /node_modules[\\/]scratch-[^\\/]+[\\/]src/],
            options: {
                // Explicitly disable babelrc so we don't catch various config
                // in much lower dependencies.
                babelrc: false,
                plugins: [
                    'syntax-dynamic-import',
                    'transform-async-to-generator',
                    'transform-object-rest-spread',
                    ['react-intl', {
                        messagesDir: './translations/messages/'
                    }]],
                presets: ['es2015']
            }
        }

解决办法二:对于某些已经支持async/await语法的node版本,比如8.11.1,babel可以不对其进行转换翻译。webpack配置如下:

        rules: [{
            test: /\.js$/,
            loader: 'babel-loader',
            include: path.resolve(__dirname, 'src'),
            query: {
                presets: [['env', {targets: {node: '8.11.1'}}]]
            }
        }

解决办法三:使用transform-runtime插件(推荐)

cnpm install babel-plugin-transform-runtime --save-dev

webpack配置:

rules: [{
            test: /\.jsx?$/,
            loader: 'babel-loader',
            include: [path.resolve(__dirname, 'src'), /node_modules[\\/]scratch-[^\\/]+[\\/]src/],
            options: {
                // Explicitly disable babelrc so we don't catch various config
                // in much lower dependencies.
                babelrc: false,
                plugins: [
                    'syntax-dynamic-import',
                    'transform-async-to-generator',
                    'transform-object-rest-spread',
                    ['transform-runtime', {
                        helpers: false,
                        polyfill: false,
                        regenerator: true,
                        moduleName: 'babel-runtime'
                    }
                    ],
                    ['react-intl', {
                        messagesDir: './translations/messages/'
                    }]],
                presets: [['env', {targets: {browsers: ['last 3 versions', 'Safari >= 8', 'iOS >= 8']}}], 'react']
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kenick

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值