webpack根据chunk加载不同的模块

2024-04-24

是否可以让 webpack 根据某些上下文信息加载另一个模块?

例如,我的 React 应用程序有两个版本:桌面版和移动版

在我的 index.js 中,我决定加载哪个应用程序:

if (isMobile()) {
   loadMobile().then(({default: App}) => render(App))
}

现在我想重用一些模块,但有些我想覆盖它。所以默认情况下它应该加载index.js,但是如果上下文isMobile并在旁边index.js a mobile.js文件存在,它应该加载mobile变体。

components/
  Button/
    index.js
    mobile.js

在移动环境中,webpack 应该加载 mobile.js 而不是 index.js

我找不到任何可以用来解决这个问题的东西,有什么想法吗?


PS:我已经在github上创建了一个问题,它也演示了问题以及我想要更好地实现的目标:

https://github.com/webpack/enhanced-resolve/issues/180 https://github.com/webpack/enhanced-resolve/issues/180


您可以使用动态加载功能和动态导入语法来解决此问题。

  1. 安装 Babel 插件plugin-syntax-dynamic-import:

    npm install --save-dev @babel/plugin-syntax-dynamic-import
    

    并用在.babelrc

    {
      "plugins": ["@babel/plugin-syntax-dynamic-import"]
    }
    
  2. 您需要创建一个名为的组件load与以下 代码:

        export default const load = (platform="index") => componentName => 
        import(`components/${componentName}/${platform}.js`);
    
  3. 然后使用带有加载功能的动态导入,如下所示 代码:

        const { Button } = await import("components/Loader.jsx").then(load => {
          load(${platform})(${componentName})
        })
    

这些文章可能会帮助您:

  • https://medium.com/front-end-weekly/webpack-and-dynamic-imports-doing-it-right-72549ff49234 https://medium.com/front-end-weekly/webpack-and-dynamic-imports-doing-it-right-72549ff49234

  • https://blog.jscrambler.com/how-to-make-your-app-faster-with-webpack-dynamic-imports/ https://blog.jscrambler.com/how-to-make-your-app-faster-with-webpack-dynamic-imports/

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

webpack根据chunk加载不同的模块 的相关文章

  • 具有多个参数的 JavaScript 函数

    我有一个将数组作为输入的函数 我如何修改它以使用变量参数和数组 例如我想要arrSum 1 2 3 arrSum 1 2 3 回来true即两者都应该返回 6 const arrSum arr gt arr reduce a b gt a
  • nodeJS require.paths 解决问题

    我试图相对且神秘地需要一个文件 以下情况正在发生 这很有效 这表明 Users marcos Desktop Taper lib utils js myPath Users marcos Desktop Taper lib utils re
  • 带有路径连接器的 jQuery 可拖动小部件

    参考该图像 Block1 和Block2 都是可拖动的 我的问题是 如何在两个块之间制作红色链状连接器 要求是链条应该延伸到块被拖动的地方 请提供任何教程 学习材料的指示 谢谢 有许多 Jquery 插件可用于创建数据库可视化或流程图的连接
  • 是否可以实现异步跨域文件上传?

    有可能的 参见下文 首先我用这张图来解释一下异步文件上传可以实现 对不起 我已经关闭了我的一个域 该图像现在消失了 不过 这确实是一个很好的图像 这是在我发现 Stack Overflow 可以通过 Imgur 上传图像之前 正如您所看到的
  • Node.js 主机名/IP 与证书的替代名称不匹配

    我正在编写一些节点代码来进行 Facebook 的服务器端登录 我已经非常接近让它完全发挥作用了 但是我在请求 auth code 时遇到了麻烦 我认为这可能与 Facebook 应用程序设置有关Site URL但我尝试过的都没有成功 我使
  • 如何使事件 DOM 侦听器适应 Google Maps JavaScript API v3.35

    我曾经使用以下代码来捕获用户的 Enter 键事件 如果用户没有选择其中任何一个 即没有标记为 pac 的 pac item 则自动从自动完成结果 pac items 中选择第一个结果 项目选择 var input document get
  • 使用 Geoserver 中的 Javascript 动态设置 WMS 图层样式

    我的 Web 应用程序通过 Geoserver 2 6 0 从 Postgis 向 OpenLayers 地图提供 WMS 图层 工作正常且符合预期 用户可以通过 WMS 图层的属性 通过 HTML 中的下拉框 过滤 WMS 图层的某些元素
  • SVG/XML 中有一些innerHTML 替代品吗?

    在 HTML 中 我可以通过提供字符串形式的模板来构建一个简单的模板系统 替换其中的某些部分 然后使用innerHTML到某个容器 var templ span myText span var newContent templ replac
  • 如何根据 URL 路径添加 CSS 类?

    如何根据我所在的路径将 CSS 类添加到 div 中 包括如果我在其中包含 则不应该出现问题 div class popup ul li a href vs Example 1 a li li a href bod Example 2 a
  • 单击按钮时执行 python 脚本

    我有一个带有一个按钮的 HTML 页面 当我们单击该按钮时 我需要执行一个 python 脚本 并返回到包含结果的同一 HTML 页面 所以我需要对返回值进行一些验证并执行一些操作 这是我的代码 HTML
  • 在 Three.js 中使用多种材质来合并几何体

    我想使用 2 个网格创建一棵松树 其中 1 个用于树干 另一个用于灌木 这就是我所做的 var pine geometry new THREE Geometry var pine texture 1 THREE ImageUtils loa
  • canvas:如何在一个变换语句中完成平移、倾斜、旋转...?

    最近几天我在学习 变换 现在我知道如何通过变换的矩阵进行平移 旋转 倾斜 缩放 但如果我想在一个转换语句中执行上述所有操作 我该怎么办 ctx transform a b c d e f 当我们想要通过变换旋转某些东西时 我们必须为每个参数
  • 如何使用环回设置 OAuth 2.0 服务器

    我想使用名为 Loopback component oauth2 的包使用 Loopback 设置 OAuth 2 0 服务器 文档在这里 https docs strongloop com display public LB OAuth
  • 从网站保存嵌入的 pdf

    我正在编写一个小型 C 应用程序来管理供应商提供的 化学品 安全数据表 目前 我手动搜索该化学品并保存 pdf 并在我的程序中添加指向 pdf 的链接 问题是我还有很多化学品需要处理 所以最好将过程自动化 例如 化学品的部件号如下 2710
  • 在 WordPress 页面上嵌入 swf

    我正在尝试将 swf 嵌入到 WordPress 页面中 这听起来很简单 但它不起作用 我不明白为什么 我已将所有相关文件上传到服务器上 并且我相当确定所有文件路径都是正确的 包含 fla 和 swf 文件的文件夹还包含一个 index h
  • 在javascript中调用c#函数[重复]

    这个问题在这里已经有答案了 可能的重复 从 Javascript 调用 ASP NET 函数 https stackoverflow com questions 3713 call asp net function from javascr
  • JavaScript 类继承

    谁能告诉我为什么我的 showDiv boo 在类的方法中未定义 我也无法访问我的类的方法 这是我的 Blink 类及其属性和方法 function Blink div this div div Blink prototype counte
  • 从 BLOB 打印 PDF

    我从外部 API 获取 PDF 文件 使用此代码我可以正确下载该文件 var req new XMLHttpRequest req open POST url true req responseType blob req setReques
  • 关闭网站的 IE 8 兼容模式

    我的公司使用IE8作为默认浏览器 并且默认为所有内联网站点设置兼容模式 我正在构建一个在关闭兼容模式时可以工作的 Intranet 站点 我正在使用 Reset css 和几个开源 JavaScript 程序 例如数据表 我想做的是强制关闭
  • 如何从 Firebase 实时数据库中删除具有 UID 的用户?

    数据库结构如下所示 LGw89Lx5CA9mOe1fSRQ uid FzobH6xDhHhtjbfqxlHR5nTobL62 image https pbs twimg com profile images 8950378298 locat

随机推荐

  • 从 ASP 的 Ajax.ActionLink 获取 JsonResult

    如何使用 Ajax ActionLink 从控制器方法实际获取 JSON 我尝试搜索该网站 但我得到的最接近的是返回 JSON 或部分 html 的 ASP NET MVC 控制器操作 https stackoverflow com que
  • 如何从模数、指数和私有指数创建 Crypt::RSA 对象?

    我正在尝试将以下 php 功能移植到 perl public function loadKey mod exp type public rsa new Crypt RSA rsa gt signatureMode CRYPT RSA SIG
  • 如何在webRTC android中将视频流数据录制为mp4?

    请帮我 我在中使用了这个例子https github com pcab AndroidRTC https github com pchab AndroidRTC将视频和音频从 Android 设备流式传输到其他 Android 设备 在这个
  • Scipy Weibull CDF 计算

    我正在 Scipy 中进行生存计算 但无法获得正确的值 My code x a c 1000 1 5 5000 vals exponweib cdf x a c loc 0 scale 1 vals应该等于 0 08555935639278
  • Boost python 导出单例

    我有一个单例 来自 boost serialization class LogManager public boost serialization singleton
  • 将日期时间设置为下一刻钟

    让我们想象一下这个datetime gt gt gt import datetime gt gt gt dt datetime datetime 2012 10 25 17 32 16 我想把时间限制在下一刻钟 以便 datetime da
  • 使用 JMeter 时陷入嵌套循环。嵌套循环控制器和 CSV 数据集配置。

    在我的网站上 我有两个商家操作 搜索和浏览 一次搜索通常会触发三次浏览 我有一个 JMeter 测试 它使用商家和商家 ID 号的 CSV 文件 在大规模运行此测试时 我希望使用我网站上的所有商家 我已经在 J Meter 中映射了它 如下
  • 使用选项模式的依赖注入

    我正在尝试从 appsettings 文件加载一些设置 但在使用选项模式时加载列表的方式遇到了一个小问题 假设我有以下类 用于加载设置 public class Application public string Name get set
  • NUnit 不会因 Finalizer 中的异常而失败

    在我们的框架中 有一些具有文件句柄或 WCF 客户端连接的关键对象 这些对象是IDiposable我们有验证代码 抛出异常 以确保它们在不再需要时得到正确处置 仅调试 这样我们就不想在发布时崩溃 这不一定是在关机时发生的 最重要的是 我们有
  • Jersey Rest 客户端未添加查询参数

    我正在尝试为 google 搜索 api 制作一个简单的球衣休息客户端 Client client ClientBuilder newClient WebTarget target client target https www googl
  • Realm 为我的 apk 添加了额外的大小

    在添加 Realm 库之前 我的 apk 的初始大小为 2 3 MB 添加相同的库后 apk 大小增加到 10 61 MB 是否可以减小大小 如果是 如何减小 如果没有 请推荐 Realm 的替代品 您可以使用 abi split 来减小
  • 是否可以取消 NKAssetDownload?

    我在 App Store 上有一个杂志阅读器 我目前正在实现 NewsstandKit 功能 我的应用程序具有此下载工作流程 用户可以随时取消当前下载 我希望用户能够购买应用内产品 并以报刊亭后台下载的方式开始下载 杂志包含多媒体 因此它们
  • Java 中是否有“/usr/bin/strip”的对应项?

    有没有任何工具可以从 Java class 文件中删除调试信息 就像 usr bin strip可以在 Linux 上从 C C 目标文件中获取吗 EDIT 我喜欢 Thilo 和 Peter 的回答 Peter 的回答很简短 而且暴露了我
  • 在不兼容的接收器上调用方法 Set.prototype.add 未定义

    我根本不明白为什么它会给出这个错误 这是我在 chrome 控制台上测试的结果 gt var mySet lt undefined gt mySet new Set lt Set gt mySet add foo bar baz Worke
  • 使用 Jbuilder(或其他)的 Rails JSON API 布局

    在我的 Rails 3 2 应用程序中 我使用jbuilder https github com rails jbuilder呈现来自我的 JSON api 的响应 我想为所有 API 响应提供一个通用的结构 而布局可能是保持视图干燥的解决
  • 检查 DST 是否生效

    In PHP date I 会告诉我夏令时是否有效 这是否告诉我 DST 是否专门针对我的服务器配置的时区有效 或者是否在有效期间 我在亚利桑那州 那里不遵守夏令时 因此 我需要我的服务器认识到纽约现在比我早 2 小时 但是当明年 3 月夏
  • Windows 7 上的 emacs 24,tramp 找不到 plink 程序

    我正在尝试在 Windows 7 上使用 Emacs 24 2 和 Tramp 来远程编辑 Linux 服务器上的文件 我安装了Putty套装程序和OpenSSH 我还将putty套装中的plink exe放入emacs 24文件夹下的bi
  • 在数据库中插入值

    嘿 我正在使用 IBM Worklight V6 2 我想将值插入数据库 我的 HTML 代码是 h1 Please Enter The Car Details h1
  • 在 Chrome DevTools 中实时更改 Vue.js 应用程序(Webpack 模板)的页面样式时,它被破坏了

    重现步骤 我有从引导的应用程序vue cli with a webpack模板 我在 Chrome 上运行它65 0 3325 146但它也存在于64 X XXX版本 我在这里添加 package json https gist githu
  • webpack根据chunk加载不同的模块

    是否可以让 webpack 根据某些上下文信息加载另一个模块 例如 我的 React 应用程序有两个版本 桌面版和移动版 在我的 index js 中 我决定加载哪个应用程序 if isMobile loadMobile then defa