javascript - 使用 Webpack 基于环境的条件构建

我有一些东西要开发 - 例如,我不想让我的分布式构建文件膨胀的模拟。

在 RequireJS 中,您可以在插件文件中传递一个配置,并在此基础上要求一些东西。

对于 webpack,似乎没有办法做到这一点。首先为我使用过的环境创建运行时配置 resolve.alias根据环境重新指出需求,例如:

// All settings.
var all = {
    fish: 'salmon'
};

// `envsettings` is an alias resolved at build time.
module.exports = Object.assign(all, require('envsettings'));

然后在创建 webpack 配置时,我可以动态分配 envsettings 指向的文件(即 webpackConfig.resolve.alias.envsettings = './' + env)。

但是我想做这样的事情:

if (settings.mock) {
    // Short-circuit ajax calls.
    // Require in all the mock modules.
}

但如果环境不是模拟的,我显然不想在那些模拟文件中构建。

我可以再次使用 resolve.alias 手动将所有这些要求重新指向 stub 文件 - 但有没有一种方法可以让你感觉不那么老套?

有什么想法可以做到吗?谢谢。

最佳答案

您可以使用 define plugin .

我通过在你的 webpack 构建文件中做一些简单的事情来使用它,其中 env 是导出设置对象的文件的路径:

// Webpack build config
plugins: [
    new webpack.DefinePlugin({
        ENV: require(path.join(__dirname, './path-to-env-files/', env))
    })
]

// Settings file located at `path-to-env-files/dev.js`
module.exports = { debug: true };

然后在你的代码中

if (ENV.debug) {
    console.log('Yo!');
}

如果条件为假,它将从您的构建文件中删除此代码。你可以看到一个工作 Webpack build example here .

https://stackoverflow.com/questions/28572380/

相关文章:

visual-studio-2010 - 在每次编译时禁用 "output window"的显示

android - 错误 :(6, 0) 未找到 Gradle DSL 方法: 'google()'

unit-testing - 没有找到测试。确保已安装的测试发现器和执行器、平台和框架版本设置正确,

go - go build 是什么意思? (去构建与去安装)

testing - 如何在不从命令行测试的情况下运行 sbt 汇编命令?

php - 错误构建 : fatal error: pcre. h:没有这样的文件或目录

java - 如何在 Eclipse 中更新 Maven 存储库?

android - 错误 - Android 资源链接失败(AAPT2 27.0.3 Daemon

xcode - 如何在 Xcode 中启用构建时间?

shell - 运行 shell 脚本时如何在 Jenkins 中将构建标记为不稳定