如何在非模块脚本中注入 Webpack DefinePlugin 变量

How to inject Webpack DefinePlugin variables in non Module Scripts

我有以下问题:

我正在使用 DefinePlugin 跨 .js 模块定义一些变量。这在 .js 模块中工作正常

但是,我的多页应用程序加载 <HEADER> TAG 中的本地脚本(custom.js) .此脚本是标准的 javascript(不是模块),使用定义插件中定义的变量之一。是App的每个页面都必须加载的.js。

出于某种原因,这个变量 WEB_CONTEXT 没有被 Webpack 在 BUILD 过程中插入。

我认为原因是因为它没有被识别为依赖项。

Webpack config.js:

  new webpack.DefinePlugin({
        'WEB_CONTEXT': 'myapp/main'   
    );

全局脚本是这样加载的:

<script src="./src/js/custom.js"></script>

custom.js

 $(function () {

     // Compiled file incorrectly shows:
        const myPath = `${WEB_CONTEXT}/resources/images`;

     // Instead of:
        const myPath = `myapp/main/resources/images`;

    });
});

问题是: 无论如何,Webpack 是否可以使 WEB_CONTEXT 变量也可用于 custom.js 等脚本(未导入,但通过加载?

Webpack "works" 仅适用于从入口文件开始的依赖树中的文件。

如果您的 custom.js 文件不在这棵树中,webpack 不会 触摸它。

您可以通过要求添加它,或将其作为附加入口添加到您的应用中。

//webpack.config.js

module.exports = {
  entry: {
    main: './path/to/my/entry/file.js',
    custom: './path/to/custom.js'
  }
};

webpack.config.js

entry : {
    main: './path/to/my/entry/file.js',
    custom: './path/to/custom.js'
}

在插件部分:

new HtmlWebpackPlugin({
                template: `./${ruta}`,
                inject: true,
                chunks: ['main', 'custom'], // <-Added custom chunk here.
                filename: `${fileName}.html`,
                templateParameters: {
                    WEB_CONTEXT: basePath
                  }
              });