webpack + babel-loader生成的输出包含`eval()`。

3
在表面上,我遇到了与这个问题相同的问题:Webpack Babel-loader transpiles code with eval(),但是这个解决方案对我不起作用。
我尝试在webpack.config.js文件中使用@babel/preset-envbabel-preset-env预设。我还尝试(失败了)使用.babelrc文件实现这两个配置。它是否是模块版本冲突的问题?
如果需要更多信息来澄清我的问题,请让我知道。 node: v10.15.3npm: 6.4.1

webpack.config.js

'use strict';

const path = require('path');

module.exports = {
    entry: {
        app: './src/js/scripts.js'
    },
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'public/dist/js')
    },

    module: {
        rules: [
            {
                test: /\.js$/, // include .js files
                exclude: /node_modules/, // exclude any and all files in the node_modules folder
                use: [
                    {
                        loader: 'babel-loader',
                        options: {
                            presets: ['@babel/preset-env']
                        }
                    }
                ]
            }
        ]
    }
};

package.json

...
"devDependencies": {
        "@babel/core": "^7.7.4",
        "@babel/preset-env": "^7.7.4",
        "babel-loader": "^8.0.6",
...

除了生成的bundle.js文件之外

/***/ }),

/***/ "./src/js/scripts.js":
/*!***************************!*\
  !*** ./src/js/scripts.js ***!
  \***************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _my_test__WEBPACK_IMPORTED_MODULE_0__ = __webpa .... ");

/***/ })

/******/ });
1个回答

3

这是因为您处于开发模式。 尝试:

  1. 将webpack配置中的devtool设置为“none”
  2. 将webpack配置中的mode设置为“production”

这样就不会看到evals了。

UPD preset-env浏览器选项可以使用browserslist格式查询字符串进行设置:

  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": "ie 11, chrome 58, > 0.25%, not dead"
      }
    ]
  ]

或者可以使用数组,但这种方法将在以后的版本中被删除。

  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "browsers": ["chrome 58", "ie 10", "not dead"]
         }
      }
    ]
  ]

1
我可以问一个附加问题吗?在我的 webpack.config.js 中,如何正确添加浏览器选项(目标)到 '@babel/preset-env' 预设的语法? - Adrian Roworth
谢谢。我漏掉了嵌套数组,只有一个层级。终于可以工作了,干杯! - Adrian Roworth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接