【问题标题】:Can VS Code automatically update JavaScript and TypeScript import paths on file rename/move?VS Code 能否在文件重命名/移动时自动更新 JavaScript 和 TypeScript 导入路径?
【发布时间】:2017-09-18 10:17:48
【问题描述】:

是否有用于更新文件路径的 vscode 模块?例如如果我有:

import './someDir/somelib'

我重命名或移动somelib,它会自动更新上面提到的所有文件中的文件路径吗?

【问题讨论】:

标签: javascript typescript visual-studio-code


【解决方案1】:

在 VS Code 1.24 (tracking issue) 中为 JavaScript 和 TypeScript 添加了此功能

当您移动或重命名文件时,系统会提示您是否要更新导入:

这由javascript.updateImportsOnFileMove.enabledtypescript.updateImportsOnFileMove.enabled 设置控制。有效值为:

  • "prompt"——默认值。提示每个文件重命名/移动
  • "always" — 始终尝试在不提示的情况下自动更新导入
  • "never"——不更新导入也不提示

【讨论】:

  • 需要在工作区中使用 TypeScript 2.9 或更新版本。如果我使用 Javascript 怎么办?
  • 相同。 JavaScript 支持 VS Code 的 TypeScript 支持,但如果您只是 JS 用户,您不太可能更改默认工作区版本
  • 有没有办法让它自动保存更改的文件?我发现我必须去挖掘所有更改了导入的文件才能保存它们,这真的很烦人。
  • 看看stackoverflow.com/questions/37014171/…,它有助于设置自动保存所有文件。在我的机器上,默认是 Ctrl + K S,但是你可以把快捷键改成你喜欢的任何东西。
  • 我不确定什么时候,但这似乎对我不起作用(或者我记错了,它只适用于 TS 而不是 JS)。即使我将 javascript.updateImportsOnFileMove.enabled 设置为 always,require() 语句也不再在移动/重命名时更新。没有运行很多扩展——只有 Angular 基本组件“包”
【解决方案2】:

正如@jamey graham 提到的,它在 React typescript 项目中不再为我工作。修复方法是将tsconfig.json 文件更新为:

{
  "compilerOptions": {
    "baseUrl": "./src",
    // ...
  },
}

并删除仅用于移动文件的"include": ["src"] 选项。 VS Code 应该在此之后很好地更新路径。

您可以在此之后恢复"include": ["src"] 选项。

我不知道为什么删除 "include": ["src"] 会起作用。

如果这不起作用,请尝试打开一个.ts 文件并在命令提示符中触发Typescript: Restart TS server 选项,然后重试。

【讨论】:

  • 奇怪,您的解决方案似乎不适用于 TS 4.1.2 和 VSCode 1.52.1 的实例化存储库,但是当我创建一个新存储库时,它可以正常工作...
  • 通过从我的自动生成的 tsconfig 中删除 "include":[], 为我修复了它
  • @joshp 感谢您的评论。删除“包含”也为我修复了它
  • 这也为我修复了它。我只是把包含放在外面,我看不出有什么不同。这样做也发现了一个错误。我在某处指的是src/File.ts 的导入
【解决方案3】:

先行设置

搜索“更新导入”

您可以选择:

  • 提示(每次重命名时提示)
  • 总是(总是自动更新路径)
  • 从不(从不重命名路径且不提示)

【讨论】:

    【解决方案4】:

    在我的项目中设置打字稿后,导入更新停止工作。

    解决方案如下:https://github.com/microsoft/vscode/issues/66937#issuecomment-475087628

    具体来说,在我的项目的根目录中添加一个jsconfig.json 文件,其中包含:

    {
      "compilerOptions": {
        "module": "commonjs",
        "target": "es2016",
        "jsx": "preserve"
      },
      "exclude": ["node_modules", "**/node_modules/*"]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多