最终的 webpack 包总是将函数包装在 eval 中,而不管 "devtool: 'inline-source-map'"

Posted

技术标签:

【中文标题】最终的 webpack 包总是将函数包装在 eval 中,而不管 "devtool: \'inline-source-map\'"【英文标题】:Final webpack bundle always wraps functions inside eval irrespective of "devtool: 'inline-source-map'"最终的 webpack 包总是将函数包装在 eval 中,而不管 "devtool: 'inline-source-map'" 【发布时间】:2021-11-16 13:43:54 【问题描述】:

我在 webpack 中尝试了 devtool 的不同选项,无论选项集如何,它总是将我的组件包装在 eval 函数中。

package.json(我可以根据要求提供完整的 JSON)

"scripts": 
        "dev": "webpack -d --env dev --config ./webpack.dev.js && clientlib --verbose",
        "develop": "webpack -d --env dev --config ./webpack.dev.js",
        "prod": "webpack -p --config ./webpack.prod.js && clientlib --verbose",
        "start": "webpack-dev-server --open --config ./webpack.dev.js"
    ,

webpack.common.js

const path = require('path');
const webpack = require('webpack');
const COMMON_SRC_DIR = __dirname + '/common.src';

module.exports = 
    resolve: 
        extensions: ['.js', '.jsx']
    ,
    entry: 
        common: COMMON_SRC_DIR + '/index.js',
    ,
    output: 
        filename: '[name].js',
        path: path.resolve(__dirname, 'dist')
    ,
    module: 
        rules: [
                test: /\.(js|jsx)$/,
                use: 
                    loader: 'babel-loader',
                    options: 
                        presets: [
                            '@babel/react',
                            '@babel/preset-env'
                        ],
                        plugins: [
                            "@babel/plugin-proposal-class-properties",
                            "@babel/plugin-proposal-object-rest-spread"
                          ]
                    ,
                ,
            ,
        ]
    ,
    plugins: [
        new webpack.optimize.LimitChunkCountPlugin(
            maxChunks: 1
        ),
    ],
    stats: 
;

webpack.dev.js

const merge = require('webpack-merge');
const common = require('./webpack.common.js');

module.exports = merge(common, 
    mode: 'development',
    devtool: 'inline-source-map',
);
// I removed/commented out a lot of other options for debugging, but still, the generated bundle is being wrapped in the `eval` function.

预期的行为是什么?devtool 设置不同的选项应该会生成不同的包。

其他相关信息: webpack 版本:"^4.42.1" Node.js 版本:v14.17.3 操作系统:macOS Bug Sur

输出包的一部分

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar commonComponents = ['SignIn', 'SearchBar', 'MiniCart', 'DropdownMenu', 'ProfileMegaMenu'];\n/* harmony default export */ __webpack_exports__[\"default\"] = (commonComponents);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hcHAuY29uZmlnLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vYXBwLmNvbmZpZy5qcz85NDg1Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGNvbW1vbkNvbXBvbmVudHMgPSBbJ1NpZ25JbicsICdTZWFyY2hCYXInLCAnTWluaUNhcnQnLCAnRHJvcGRvd25NZW51JywgJ1Byb2ZpbGVNZWdhTWVudSddO1xuXG5leHBvcnQgZGVmYXVsdCBjb21tb25Db21wb25lbnRzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./app.config.js\n");

【问题讨论】:

配置看起来不错。你介意设置一些东西让我们重现吗? 您好,感谢您的回复。我用最少的设置创建了一个 repo。它仍然将文件包装在 eval 中。开始怀疑它是否与添加到 package.json 的软件包之一有关。这里:github.com/thomsebastin/sample-wp-test 【参考方案1】:

我刚刚发现-d --env dev 选项将覆盖您的配置文件,这就是它可能使用默认devtool 模式的原因。

我认为你可以删除它,如果你热衷于使用 env 变量,你可以使用 webpack 的 env 插件:

// Remove this option `-d --env dev`

  "develop": "webpack --config ./webpack.dev.js",

【讨论】:

立即工作。谢谢你。我几乎没有运气就从 package.json 中删除了所有包。有时需要用全新的眼光来解决问题。 是的,这是事实:)

以上是关于最终的 webpack 包总是将函数包装在 eval 中,而不管 "devtool: 'inline-source-map'"的主要内容,如果未能解决你的问题,请参考以下文章

为啥 webpack4 生产包总是包含 style-loader、css-loader 和 vue-loader 内容?

vue - webpack.dev.conf.js for merge

如何封装/包装一个 VueJS 组件?

Webpack ProvidePlugin/vendor bundle:angular.module 不是函数

将常规 npm 包加载到 webpack/angular cli [找不到模块]

忽略 Webpack 中的特定 require()?