代码之家  ›  专栏  ›  技术社区  ›  Ivan Jeffrey Zhao

带有eval()的Webpack Babel loader Transfiles代码

  •  12
  • Ivan Jeffrey Zhao  · 技术社区  · 8 年前

    我对Webpack和Babel有意见。我正在尝试将JavaScript代码传输到捆绑文件中。以下是文件结构和代码片段:

    文件结构:

    - src
    | file.js
    package.json
    webpack.config.js
    

    包裹json:

    {
      "name": "babel-webpack-starter",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "webpack --mode development"
      },
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "babel-core": "^6.26.3",
        "babel-loader": "^7.1.4",
        "babel-preset-env": "^1.7.0",
        "webpack": "^4.8.3",
        "webpack-cli": "^2.1.3",
        "webpack-dev-server": "^3.1.4"
      }
    }
    

    网页包。配置。js公司:

    const path = require('path');
    
    module.exports = {
        entry: {
            app: './src/file.js'
        },
        output: {
            path: path.resolve(__dirname, 'build'),
            filename: 'app.bundle.js'
        },
        module: {
            rules: [
                {
                    test: /\.js?$/,
                    exclude: /node_modules/,
                    use: [
                        {
                            loader: 'babel-loader',
                            options: {
                                presets: ['env']
                            }
                        }
                    ]
                }
            ]
        }
    }
    

    当我进入时 webpack --mode development ,它将创建文件 app.bundle.js 已成功进入目录 build .

    enter image description here

    然而,它似乎没有正常工作,因为在 build/app.bundle.js 我在哪里寻找代码 src/file.js 我有以下几点:

    /*! no static exports found */
    /***/ (function(module, exports, __webpack_require__) {
    
    "use strict";
    eval("\n\nvar fun = function fun() {\n  return console.log('Hello World');\n};\n\n//# sourceURL=webpack:///./src/file.js?");
    
    /***/ })
    

    这很奇怪,难道我不应该只吃这个吗?

    /***/ (function(module, exports, __webpack_require__) {
    
    "use strict";
    let fun = () => console.log('Hello World')
    
    /***/ })
    

    配置是否有问题?

    2 回复  |  直到 8 年前
        1
  •  17
  •   Rico Herwig    8 年前

    这其实不是因为巴别塔,而是因为webpack。它需要一个名为 devtool 这就决定了它是否应该 eval 代码或使用某种源代码映射。

    您可能正在查找以下内容:

    // webpack.config.js (excerpt)
    module.exports = {
        // ...
        devtool: 'inline-source-map'
        // ...
    };
    

    这个 inline-source-map 省略eval,在bundle中使用内联良好的sourcemap。但不要将其用于生产;-)

    有几个选项 开发工具 这些都有各自的优点和缺点。有关此主题的更多信息,请参阅 official webpack documentation .

        2
  •  5
  •   Ivan Jeffrey Zhao    8 年前

    经过无数个小时的研究,我终于找到了解决方案,需要使用的预设是 babel-preset-env 和 不 env .

    const path = require('path');
    
    module.exports = {
        entry: {
            app: './src/file.js'
        },
        output: {
            path: path.resolve(__dirname, 'build'),
            filename: 'app.bundle.js'
        },
        module: {
            rules: [
                {
                    test: /\.js?$/,
                    exclude: /node_modules/,
                    use: [
                        {
                            loader: 'babel-loader',
                            options: {
                                presets: ['babel-preset-env'] // <-- here
                            }
                        }
                    ]
                }
            ]
        }
    }