小编Cha*_*ase的帖子

D3.js v6 for IE11(通过 JavaScript Transpilation 到 ES5 的传递 CDN)

我有几个 Meteor Web 应用程序,它们通过客户端中的 NPM 依赖于 D3.js。

D3 的 v6 版本取消了对 ES5 的支持,并且只针对浏览器部署到 NPM 的代码——我的应用程序需要支持 IE11,所以需要 ES5 支持。

我最初尝试直接通过 Meteor 中的工具在本地进行转译(https://guide.meteor.com/using-npm-packages.html#recompilehttps://docs.meteor.com/packages/ecmascript.html) ,但后来发现它仅适用于 DIRECT 依赖项,不适用于应用程序中的子依赖项,并且在 Meteor 包中完全不可用。

事实证明,D3 现在已经分解成许多子包。请参阅:https : //github.com/d3/d3/blob/master/index.jshttps://github.com/d3/d3/blob/master/package.json#L46 - 所以所有的代码需要重新编译存在于间接依赖中。

我在那里尝试的一切都会导致死胡同,所以我想我会更多地考虑其他选择。

剩下的选项似乎是:

  • 找到一个 CDN,它将就地传递透明转译回 ES5 语法并缓存 NPM 包或指定的 JS URL。
    • 我几乎可以肯定,我曾经见过并使用过以前这样做过的 CDN——我只是不记得名字了。它通过名称和版本/最新(例如https://d3js.org/d3.v6.js)获取 npm 包并将它们转换为 ES5 并缓存结果。
  • 在meteor外写一些本地工具来安装babel cli,从CDN下载文件,转译,保存到本地git repo作为应用程序代码。
    • 我不喜欢这个选项,因为它非常手动,需要所有开发人员安装工具,并且代码库的搜索结果会经常从这个大型库中返回代码。
  • 创建一些定时任务,每天下载一次 D3 的最新 NPM 版本,对其进行转译,并将结果发布到应用程序使用的私有 NPM 包中。
    • 听起来像痛

有谁知道这样做的CDN?如果我不担心某些性能边缘情况,我几乎想通过 Lambda@Edge 和 CloudFront 制作我自己的一个,如果我所想的实际上并不存在。

我还接受有关如何成功地在 MeteorJS 中本地转译 D3 v6 以支持 …

cdn npm d3.js meteor babeljs

5
推荐指数
0
解决办法
346
查看次数

标签 统计

babeljs ×1

cdn ×1

d3.js ×1

meteor ×1

npm ×1