使用Webpack基于环境进行条件构建

2024-01-12

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

在 RequireJS 中,您可以在插件文件中传递配置,并基于该配置有条件地要求内容。

对于 webpack 似乎没有办法做到这一点。首先为我使用的环境创建运行时配置解析别名 http://webpack.github.io/docs/configuration.html#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手动将所有这些需求重新指向存根文件 - 但有没有一种方法感觉不那么hacky?

我有什么想法可以做到这一点吗?谢谢。


您可以使用定义插件 https://github.com/webpack/docs/wiki/list-of-plugins#defineplugin.

我通过在你的 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 构建示例在这里 https://github.com/mderrick/webpack-react-boilerplate/blob/master/webpack.default.config.js#L74.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Webpack基于环境进行条件构建 的相关文章

  • 将 next.js 与纱线工作区结合使用

    今天遇到了这样的项目结构的复杂情况 packages app pages package json ui kit pages package json shared babelrc package json root lvl 包 json
  • 在 userCodeAppPanel 中看不到我的 javascript 代码

    这是来自 Google 电子表格中包含的脚本的代码 唯一的其他代码是onOpen它创建菜单和showDialog 功能 function showDialog userInterface HtmlService createHtmlOutp
  • 共享工作线程在重新加载页面时终止

    为什么 Shared Worker 在重新加载页面时死掉了 应该是复活了我该如何解决这个问题 重新加载前 重新加载后 在 example com 上按 F5 家长工人 var port new SharedWorker app worker
  • setTimeout 用于加载下拉列表中的项目

    我在用setTimeout克服 中提到的缓慢处理脚本警告 禁用 Internet Explorer 中的长时间运行脚本消息 https stackoverflow com questions 4460263 disabling the lo
  • Javascript 无法正确排序 DECIMAL 数字

    我有一些代码可以按字母顺序对名称进行排序 我遇到的问题是它处理小数的方式 它对名称进行排序 如下所示 我宁愿它按数字递增 DOG 1 0510 DOG 1 1031 DOG 11 1792 DOG 12 0920 DOG 12 1170 D
  • Javascript - 使数组索引 toLowerCase() 不起作用

    我试图将所有数组索引设置为小写字符串 但它不起作用 我在这里查看了其他答案并尝试了他们的解决方案 例如使用toString 添加之前toLowerCase但它不起作用 这很奇怪 我创建了一个问题的jsfiddlehere https jsf
  • 光标:IE 8 和 9 中的自动行为

    我想要的是为整个正文标记指定cursor pointer 这样页面的背景是可点击的 但我也希望页面的其余部分像以前一样工作 所以我尝试为div设置cursor auto 其中包含这一页 在 FF Chrome 和 safari 中 它工作得
  • 如何将查询参数添加到守卫中的路由并将其传递给 Angular 4 中的组件?

    我在我的 Angular 4 应用程序中使用路由保护 如果条件满足并返回 true 我想向路由添加一个查询参数 这是我一直在研究的代码 Injectable export class ViewGuardService implements
  • “move(-1)”作为 AngularJS 表达式有什么问题吗?

    我收到此错误 parse ueoe Unexpected end of expression move 从这段代码来看
  • 使用淘汰赛动态显示/隐藏元素

    我有一个表 有四列 即代码 名称 数量和价格 其中 我想动态更改数量列的内容 元素 通常 它应该显示其中显示数量的元素 当用户单击元素时 我想显示该元素 以便用户可以编辑数量 我正在尝试按照 示例2 来实现淘汰赛文档链接 http knoc
  • Google 地图 Javascript v3 折线点击事件

    我正在尝试显示一张地图 其中有多条路线布置为折线 单击多段线时 我想显示特定于该线的数据 将数据与线关联不是问题 但无论单击哪条线 显示的数据都会与最近绘制的线关联 就好像每条新折线都会覆盖最后一条线一样 我有一个数据库 其中包含 gpx
  • Firefox 上的 jquery 焦点未设置

    我想将焦点设置到我的文本区域 以下是我的代码 this textInput val show focus 但它不起作用 实际上 当我按下鼠标按钮时 它会出现 但是当我松开鼠标时 它会从文本区域中删除 因此 经过大量搜索后 我发现 setTi
  • 如何处理 setTimeout() 的多个实例?

    阻止创建 setTimeout 函数的多个实例 在 JavaScript 中 的最推荐 最佳方法是什么 一个例子 伪代码 function mouseClick moveDiv div 0001 mouseX mouseY function
  • 如何使用转义的 unicode 解码字符串?

    我不确定这叫什么 所以我在搜索时遇到了麻烦 如何使用 unicode 解码字符串http u00253A u00252F u00252Fexample com to http example com使用 JavaScript 我试过unes
  • Intern JS - 如何在链式 Command 方法中使用 Promise.all()?

    我是用 Intern JS 编写测试的新手 并且一直在遵循他们的文档来使用对象接口 https theintern github io intern interface object and 页面对象 https theintern git
  • Kendo 刷新 (DropDownList.refresh()) 不起作用错误未定义

    我试图在另一个 DropDownList 更改后刷新下拉列表 但 Refresh 方法未定义错误正在升级 我尝试再次读取数据源 它显示它正在加载 但数据仍然相同 帮助解决这个问题请 Code DropDownList1 change fun
  • IE9 中的无效字符 DOM 异常

    以下这段 JS 曾经在 IE8 中工作 现在在 IE9 中失败 document createElement 我收到以下异常 SCRIPT5022 DOM 异常 INVALID CHARACTER ERR 5 上面这段代码是不是不符合标准呢
  • 除非打开开发人员工具,否则 IE8 Javascript 无法运行?

    由于某种原因 在 IE8 中 除非我在打开开发工具的情况下重新加载页面 否则 javascript 不会运行 我关闭开发人员工具并重新加载页面 然后 javascript 停止工作 我没有收到任何错误报告 无论如何它们也没有任何用处 还有其
  • 检测 html 选择框上的编程更改

    有没有办法让 HTML 选择元素在每次以编程方式更改其选择时调用函数 当使用 JavaScript 修改选择框中的当前选择时 IE 和 FF 都不会触发 onchange 此外 更改选择的 js 函数是框架的一部分 因此我无法更改它以在结束
  • 为什么 phantomjs 不能在 MacOS Sierra 中工作?

    我们正在使用phantomjs 1 9 1 macosx phantomjs 2 0 0 macosx哪一个工作得很好OS X 埃尔卡皮坦更新后macOS 塞拉利昂它会引发以下错误 phantomjs 1 9 1 macosx phanto

随机推荐

  • R中读取文件时出错

    我是 R 社区的新人 在编写我的第一个程序时 我遇到了一个愚蠢的问题 当尝试使用以下代码读取 RDS 文件时 tweets lt readRDS RDataMining Tweets 20160212 rds 会出现以下错误 Error i
  • 使用全文搜索来搜索mysql中不完整的单词

    我正在制作一个图书馆管理系统 我在从 mysql 数据库搜索书籍时遇到问题 为了在 mysql 中搜索数据 我们使用全文搜索 但只有给出完整的单词时它才有效 如果用户输入不完整的单词而不是实际单词 是否有任何功能可以搜索 例如 如果书名是微
  • 一个异常处理程序用于处理一类的所有异常

    我有一个包含多种方法的类 并且希望为所有方法提供一个异常处理程序 这些方法有很多 而且它们有不同的参数 为每个方法都编写 try catch 会很丑陋 您是否知道一种方法 我可以通过在类异常处理程序中使用一个来处理所有这些异常处理程序 UP
  • 检查MySql列之一中是否存在表单发布的变量[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个 html 表单 其中发布了类编号值 Ex 150701 003 在我的 php 操作文件中 我想检查变量 class number
  • “设备的 ioctl 不合适”

    我有一个在 AIX 机器中运行的 Perl 脚本 该脚本尝试从某个目录打开文件 但无法读取该文件 因为文件没有读取权限 但我收到不同的错误消息inappropriate ioctl for device 难道不应该说类似的话吗no read
  • WebDriverException:服务 U:/Scraping/chromedriver.exe 意外退出。使用 Chrome 和 Python 时状态代码为:1

    我一直在尝试让网络驱动程序在 Chrome 中与 Python 一起工作 但我一生都无法找出问题所在 尽管我花了一天的大部分时间进行故障排除 我已将 chromedriver 解压缩到我正在使用的文件夹中 我尝试使用executable p
  • javascript 的 'this' 关键字与 java 的 'this' 关键字有何不同?

    javascript 的 this 关键字与 java 的 this 关键字有何不同 任何实际示例将不胜感激 var counter val 0 increment function this val 1 counter increment
  • 如何处理使用套接字连接到服务器的多个客户端?

    我有一个 Android 应用程序需要让多个设备连接 一台设备应充当组所有者并向所有客户端发出指令以执行特定操作 我认为它类似于一款无线手持游戏 其中一名玩家是主机 我有几个问题 所以我会尽量保持简洁 即使只回答第一个问题也会有帮助 首先
  • R ffdfdply 分割问题

    我对 R 的 ffdfdply 函数有疑问 a as ffdf data frame b 11 20 c c 4 4 4 4 4 5 5 5 5 5 d c 1 1 1 0 0 0 1 0 1 1 ffdfdply a split a c
  • 标准化 URI 以仅提取域名的最佳方法是什么?

    例如 http www google co uk www google co uk google co uk 将全部转换为 google co uk 我本来想使用 System Uri 类 但这似乎只接受带有方案的 url 提取域名很简单
  • Swift:将一组字典扁平化为一个字典

    在 Swift 中 我试图将一组字典扁平化为一个字典 IE let arrayOfDictionaries key1 value1 key2 value2 key3 value3 key4 value4 the end result wil
  • 为什么 Angular Google 地图中的 元素需要 ng-non-bindable?

    我有一个关于的元素角度谷歌地图 http angular ui github io angular google maps api插入 Windows 元素文档中的示例源代码使用ng non bindable属性为 div 里面的 div
  • 突出显示表格行

    我有以下表结构 table tbody tr td Lorem td td Ipsum td td Fierent td tr tr td Lorem ipsum td td pro ut tale erant td td mnesarch
  • 通过发送意图来启动 Android WiFi 管理器?

    我正在开发一个应用程序 我想要一个按钮 打开Android内置的WiFi菜单 我真的不想自己实现扫描和连接代码 我可以发送任何打开此菜单的意图吗 你应该使用ACTION PICK WIFI NETWORK http developer an
  • Nutch 爬取文档的 Elasticsearch 映射面临问题

    使用 nutch 和 elasticsearch 进行爬行时面临一些严重的问题 我们的应用程序中有两个数据存储引擎 MySql 弹性搜索 假设我有 10 个 url 存储在 mysql 数据库的 urls 表中 现在我想在运行时从表中获取这
  • chain(*iterable) 与 chain.from_iterable(iterable) 之间的区别

    我对所有有趣的迭代器着迷itertools 但我遇到的一个困惑是这两个函数之间的区别以及为什么chain from iterable exists from itertools import chain def foo n for i in
  • Chrome 中的 Tab 悬停事件

    chrome 扩展 api 是否提供将鼠标悬停在选项卡上的事件 我无法在文档中找到它 或者也许有一种未记录的方法 目前似乎没有办法做到这一点 我希望他们添加它
  • 单击系统托盘图标 Python Win32

    环境 我在 Windows 7 64 位上使用 Python 2 7 32 位 我正在使用 win32 Api 来制作一个 Windows 自动化工具 我知道有一些工具存在 但我正在制作自己的工具 Problem 我被困在窗户边系统托盘 通
  • 无法将 com.facebook.share.widget.Sharebutton 添加到布局 XML

    我正在尝试在 Android 中使用 Facebook SDK分享内容 https developers facebook com docs sharing android来自我的应用程序的方向 我从这里开始使用以下代码脸书文档 https
  • 使用Webpack基于环境进行条件构建

    我有一些需要开发的东西 例如模拟 我不想用它来膨胀我的分布式构建文件 在 RequireJS 中 您可以在插件文件中传递配置 并基于该配置有条件地要求内容 对于 webpack 似乎没有办法做到这一点 首先为我使用的环境创建运行时配置解析别