从命令行重新组织大型 TypeScript 项目

dan*_*nvk 5 automated-refactoring typescript visual-studio-code

我有一个中型/大型 TypeScript 项目(约 500 个源文件),我想进行大规模重组,更改目录结构并移动所有模块。

在 VS Code 中移动单个文件并更新所有导入非常简单:

将文件移动到子目录并更新 VS Code 中的导入

此重构是使用TypeScript Language Service实现的。使用拖放进行移动和更新对于少量文件来说效果很好,但对于大规模重组,我宁愿编写某种脚本:

old/path/to/file.ts --> new/path/newfile.ts
old/path/to/olddir --> new/path/to/newdir
Run Code Online (Sandbox Code Playgroud)

是否可以通过这种方式与 VS Code 或 TypeScript 语言服务交互?是否还有其他 TypeScript 或 JavaScript codemod 工具可以帮助解决此问题?

dan*_*nvk 4

使用ts-morph 的SourceFile.move方法,这变得非常简单:

const project = new Project({ tsConfigFilePath });
const sourceFile = project.getSourceFileOrThrow('/path/to/file.ts');
sourceFile.move('newFileName.ts');
// or:
// sourceFile.moveToDirectory('/some/dir');
Run Code Online (Sandbox Code Playgroud)

我整理了一个名为的小工具,用于ts-mover大致消耗问题中描述的移动格式列表(第一行是 的路径tsconfig.json):

$ cat moves.txt
path/to/tsconfig.json
src/oldname.ts --> src/newname.ts
src/file.ts --> src/newmodule/file.ts
src/file2.ts --> src/newmodule/

$ npx ts-mover moves.txt
Moving src/oldname.ts --> src/newname.ts
  (Be patient, the first move takes the longest.)
  elapsed: 455 ms
Moving src/file.ts --> src/newmodule/file.ts
Moving src/file2.ts --> src/newmodule/file2.ts
Saving changes to disk...
Run Code Online (Sandbox Code Playgroud)

它比我想要的要慢一点,特别是对于大型项目,但它绝对胜过在 VS Code 中拖放数百个文件!