V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sunjourney
V2EX  ›  程序员

当 Webpack 引用的 CDN 资源不可用时如何忽略引用的模块呢呢?

  •  
  •   sunjourney · 2016-07-11 10:04:20 +08:00 · 5652 次点击
    这是一个创建于 3050 天前的主题,其中的信息可能已经有所发展或是发生改变。

    实际中遇到的问题是地图服务,不是 CDN 资源。 在 html 中引入了

    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=token"></script>
    

    在 webpack.base.conf.js 设置了外部资源

    externals: {
      "BMap": "BMap"
    }
    

    当网络正常时:

    import BMap from 'BMap'
    

    工作正常

    当断网时控制台报错:

    Uncaught ReferenceError: BMap is not defined
    

    不仅报错,还阻止了整个 Web APP 运行。用异步模块解析,只要触发 import xxx from 'BMap' 就跪。 import 又只能放在 top level ,没法 try catch 它。怎么才能当网络无法访问 externals 资源时不影响 Web APP 运行呢?比如只是使用地图的部分不加载地图,其它部分保持正常工作

    3 条回复    2016-07-11 17:04:33 +08:00
    chemzqm
        1
    chemzqm  
       2016-07-11 11:24:57 +08:00   ❤️ 2
    去掉 import 和 webpack 相关设置,直接检测 window 对象
    sunjourney
        2
    sunjourney  
    OP
       2016-07-11 11:38:17 +08:00
    @chemzqm 感谢,这是好方法, hack 了这个问题,就是不知道有没有 webpack 内部的解决方案。 google 了很久, webpack 文档相关部分也过了,似乎没有。
    chairuosen
        3
    chairuosen  
       2016-07-11 17:04:33 +08:00
    @sunjourney require 的时候 try catch 一下喽
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2907 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:24 · PVG 14:24 · LAX 22:24 · JFK 01:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.