typescript - 为 ES5 和 ES6 目标编译的 JavaScript 库
问题描述
我有两个用 TypeScript 编写的应用程序:
- 首先是用于不受控制的环境的应用程序,因此我们将编译器的目标设置为 ES5 以获得更好的兼容性。
- 第二个是编译器目标设置为 ES6 的应用程序。该应用程序在装有最新 Google Chrome 的机器上运行,因此运行良好。
这里的主要兴趣点是我们的库(一个单独的 npm 包),它具有在两个应用程序中使用的一些通用功能(作为它们的依赖项)。挑战在于该库当前将其目标设置为 ES5,但我想开始使用 ES6 功能,如本机类,而无需将它们转换为 ES5 以用于 ES6 应用程序。
我想到了我可以做的事情:
我可以开始将它编译为 ES5 和 ES6(并且有类似的
dist/
东西),而不是为库的编译源提供一个目录,这样每个应用程序都可以在导入模块时选择它的版本。这可能解决了问题,但对我来说并不那么漂亮。例如,我认为在 IDE 中导入符号会很麻烦,因为每个导出的变量或类型都存在两次。dist/es5/
dist/es6/
或者,我只能将库编译为 ES6,但在第一个项目中,我需要开始使用 babel 将库的 ES6 代码转换为 ES5。这可能也解决了问题,但这也意味着应用程序的 devstack 变得复杂(而且可能更慢?)。
所以我的问题是:这里的最佳做法是什么?行业标准是什么?
npm 注册表中的库总是编译为 ES5 并且业界还没有开始使用 ES6 的情况是否普遍?或者说库可以在 ES6 中编写、编译和发布是很常见的,但是你总是希望在你的应用程序中使用 babel 来处理 ES6 不可用的环境?还是我缺少第三种方法?
谢谢!
解决方案
推荐阅读
- javascript - 如何检查用户是否具有任何列出的权限?
- json - 将 terraform HCL 变量 type=map(any) 转换为 JSON
- python - glob.glob 返回空列表
- json - 使用 kafka-json-schema-console-producer 生成具有键模式和值模式的消息
- r - 将美国边界和缩写添加到带有县区域的 USmap
- python - Django如何提高密码重置的安全性?
- c++ - 如何让 C++ 程序停止评估操作语句?
- reactjs - 部署到 AWS 放大时,有没有办法使用 .env 反应应用程序?
- java - 比较两个双精度数组,然后打印差异数 + 最大差异
- javascript - 您可以链接到导航中的特定隐藏/显示元素吗?我正在尝试在一页上创建一个 3 页的网站