首页 > 解决方案 > Webpack Babel Function("r", "regeneratorRuntime = r")(r) 违反 unsafe-eval CSP

问题描述

我正在使用下面的 webpack 配置来构建我的所有 JS 文件:

const path = require('path');
const glob = require('glob');

module.exports = {
  entry: Object.fromEntries(glob.sync(path.resolve(__dirname, 'src/js/profile/*.js')).map((v) => [
    path.basename(v, '.js'), v,
  ])),
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist/js/profile'),
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ["@babel/preset-env"],
            plugins: [
              [
                "@babel/plugin-transform-runtime",
                {
                  "useESModules": true
                }
              ]
            ]
          }
        }
      }
    ]
  }
};

如果我加载适当的页面,我会收到以下错误:

Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self'".

当我单击所有 unsafe-eval 错误时,它们都指向相应文件:

            }(e.exports);
            try {
                regeneratorRuntime = t
            } catch (e) {
                Function("r", "regeneratorRuntime = r")(t)
            }

错误在线Function("r", "regeneratorRuntime = r")(t)

在遇到错误的 JS 文件中,我使用的是import, export,async awaitarrow functions.

我做了一些研究,它说这是由于引入了新的 JS 方法,Babel 无法识别。但我使用的是最新的 Babel 和 Webpack:

  "devDependencies": {
    "@babel/cli": "^7.12.8",
    "@babel/core": "^7.12.9",
    "@babel/plugin-transform-runtime": "^7.12.1",
    "@babel/preset-env": "^7.12.7",
    "babel-loader": "^8.2.2",
    "glob": "^7.1.6",
    "grunt": "^1.3.0",
    "grunt-contrib-concat": "^1.0.1",
    "grunt-contrib-cssmin": "^3.0.0",
    "grunt-contrib-uglify": "^5.0.0",
    "webpack": "^5.10.0",
    "webpack-cli": "^4.2.0"
  }

标签: javascriptwebpackbabeljs

解决方案


推荐阅读