替换webpack包中的变量,而不会破坏源映射并且无需重建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了替换webpack包中的变量,而不会破坏源映射并且无需重建相关的知识,希望对你有一定的参考价值。

我的javascript代码(与webpack捆绑在一起)中有一些变量,需要根据环境进行替换:

const AUTHENTICATE_URL = '{{conf.authenticate_url}}'

如何在不重新运行每个环境的构建的情况下执行此操作(运行构建太慢)。我的html中没有第二个标记,我只需要一个包含该标记的标记。

目前我只是使用模板处理器替换这些变量,但这打破了源映射,这意味着我可能会替换我不想替换的东西。

答案

仅仅构建一次所有内容并在每个环境中都使用相同的代码并不是最好的主意,但如果这是必须的话......

Webpack Define plugin

的WebPack

new webpack.DefinePlugin({
  'SERVICE_URL_DEV': JSON.stringify('http://dev.example.com'),
  'SERVICE_URL': JSON.stringify('http://example.com')
});

JS

if (DEV_ENVIRONMENT) {
  console.log(SERVICE_URL_DEV);
} else {
  console.log(SERVICE_URL);
}

我在这里假设您可以通过某种方式区分您所处的环境,并且我猜测您在代码中有一个常量,您通过URL或窗口中的某些东西想出来,它被称为DEV_ENVIRONMENT,这在生产中的开发和虚假。

编辑:因为我们真的不知道你的意思100%。如果您不想重建,只需要在每个环境中更改变量。

他是值得的。

每个环境中的variable.json文件,每个环境中的不同URL

{authUrl: 'https://dev.example.com'}

应用程序中的JS文件

let AUTHENTICATE_URL;
axios.get('https://yoururl.com/path/to/variable.json').then((response) => {
  AUTHENTICATE_URL = response.data.authUrl;
});

以上是关于替换webpack包中的变量,而不会破坏源映射并且无需重建的主要内容,如果未能解决你的问题,请参考以下文章

webpack 4 sass-loader 不生成 scss 源映射

使用 webpack-2 在 chrome 中检测到源映射但未加载原始源

webpack配置文件中的devtool与其他插件(例如UglifyjsWebpackPlugin)源映射选项有什么区别?

Webpack 中 Typescript 的源映射(使用 webpack-dev-server 时看不到源映射)

如何使用 webpack 加载库源地图?

源地图不适用于 Webpack