javascript - 逐步从包含每个 JS 文件转向模块捆绑
问题描述
在我们的 AngularJS 应用程序中,我们目前有很多(400 多个)文件,这些文件通过<script>
-tags 包含在内。这些文件的顺序是这样的:
- AngularJS 脚本文件
- 3rd 方插件/模块
- 业务逻辑文件
- 模块
- 服务
- 控制器/组件/指令
我们希望转向使用模块捆绑器和 TypeScript 的更好方法。新文件已经用 TypeScript 编写,但不使用import
/ export
。为了让事情变得更简单,我们可以将每个 JavaScript 文件转换为 TypeScript 文件,并在可行的时间内修复由此产生的错误。
但是,在我们这样做之前,我们希望有一个可行的策略来逐步使用import
/ export
。我正在考虑不时重写一个模块,从依赖树深处的模块开始。
但是我无法做到这一点,但我很确定其他人之前已经不得不解决这个问题。
解决方案
一旦你决定了一个模块捆绑器,你需要了解它的功能:(1) 允许页面上的其他 JavaScript 访问包中定义的东西;(2) 允许包访问由其他 JavaScript 定义的东西。页。(如果你能够以严格的依赖顺序迁移,你可能永远不需要#2。)例如,对于 Webpack,#1 将是library*
输出选项,#2 将是外部选项. 然后将代码一点一点地移动到模块中,根据需要调整配置,以便代码的每一部分都可以从代码的另一部分访问它需要的东西。由于 Webpack 仅支持单个库导出模块,因此在转换期间,您可能必须维护一个虚拟模块,该模块仅重新导出您需要从包外代码访问的所有模块。这有点乏味,并且代表了如果您一次迁移所有您不必做的额外工作,但您可能会认为值得支付这笔费用以便能够逐步迁移。
如果您在从非模块 TypeScript 文件中的 TypeScript 模块文件获取类型信息时遇到问题,请参阅此答案以获得解决方法。
推荐阅读
- angular - 角嵌套订阅调用
- azure - 如何从 ARM 模板输出中删除特定字符?
- javascript - 如何在VueJS中多次更改元素的类
- java - 基于条件的依赖注入
- c# - C# StreamWriter 将额外的字节写入 Stream
- node.js - 如何使用节点 js 为子目录反应应用程序提供服务
- regex - 排除 RegExp 匹配 Golang 中的模式
- c - 在 C 中,为什么用 y 交换 x 比用 x 交换 y 更快?
- python - Django Channels:应用程序内部异常:消息类型app_consumer.notification_message没有处理程序
- python - 执行散列 python 代码(base64、sha256 或其他)