我正在运行一个巨大的项目,其中有成千上万的.js
文件是用es5
编写的,由于TS
的许多原因和好处,我们决定开始迁移到TS
,经过几天和许多研究,我将详细说明几点:
要开始从es5
迁移到ts
,我们可以通过两种方式开始:
第一方式:
1-安装ts
,创建tsconfig
,并将allowJS
设置为true,然后开始将文件扩展名更改为.ts
,默认情况下一切都会正常工作
2-由于我们希望逐步迁移,我们不希望立即将全局脚本替换为本机模块,换句话说,我们不希望立即输入import
和export
,而是希望保留旧的global scripts
方式,并使用/// <reference path="">
来加载依赖
3-在上一步之后,我们可以逐渐开始将文件转换为本地模块esm
第二种方式:
1-正如我读到的UMD它将在浏览器(客户端)和服务器上工作,这意味着支持所有类型的模块AMD, CommonJS, SystemJS and Native ES modules
2-在以UMD
的方式重写脚本后,我们可以逐渐开始将脚本移动到ESM
最后但并非最不重要,关于智能,我们将相应地开始编写.d.ts
文件,或者我们可以依赖ts-loader
来生成文件
最后,我们要么选择ts-loader
,要么选择babel
,但我们不确定它们是否都有一些限制
对于开始迁移的最佳方式有任何想法都非常感谢
也许这个工具可以帮助你:https://github.com/airbnb/ts-migrate
ts-migrate是一个帮助将代码迁移到TypeScript的工具。它接受一个JavaScript或部分TypeScript项目,输出一个正在编译的TypeScript项目。ts-migrate旨在加速TypeScript迁移过程。生成的代码将通过构建,但需要后续操作来提高类型安全性。
如果可能的话,重新开始并编写复制/粘贴代码任务的迁移脚本。其中项目设置将在编译/构建/运行/lint方面无错误。所以即使在未来,也不会有任何问题,你只需要添加模块。你可以一个模块一个模块地迁移。
现在如果你迁移到TS意味着不仅仅是扩展或包类型,因为它不会有更多的好处,你需要改变代码,如类型,接口,配置等。
所以开始一个新的项目,然后将代码转换为TS,然后逐渐移动应该更好。
我建议你应该用typescript编写新的模块,并慢慢地将现有的文件和模块转换为typescript。但是只保留js格式的输出。将每个ts文件转换为js,例如,如果你有一个模块Utils,在这个ts和js中创建两个文件夹。编写一个构建脚本,将ts转换为js并移动到js文件夹中。通过这种方式,您可以将所有文件转换为ts。对于导入/导出,您可以为新模块启动它。我在一个项目中也做过同样的事情。
问候,尾身茂
我欣赏所有的答案,但对于我的情况,它是如此复杂,因为ts模块会影响scope
,我发现有用的是使用所谓的shimmer modules
在webpack
允许一个叫做imports-loader
的功能,我可以用它来操纵js的范围,因此没有什么是打破的,然后我可以逐个文件移动文件开始迁移