有没有办法从Angular 2+中删除未使用的导入和声明?

ske*_*ske 94 visual-studio-code angular

我被指派从最近离开公司的其他开发人员处获取一些混乱的代码.

我很好奇地问是否有一些Visual Studio Code插件或其他方法可以帮助我们快速有效地整理和组织导入和引用?

例如,可能有数百个这样的导入

import { AutoCompleteModule,InputSwitchModule } from 'primeng/primeng';
import { ListboxModule } from 'primeng/primeng';
Run Code Online (Sandbox Code Playgroud)

可以转换成类似的

import { AutoCompleteModule,
         InputSwitchModule,
         ListboxModule  } from 'primeng/primeng';
Run Code Online (Sandbox Code Playgroud)

或者其他功能,比如从app.module或整个项目中的所有组件自动删除那些未使用的导入和声明?

感谢您的任何反馈!

Aar*_*dan 147

从Visual Studio Code Release 1.22开始,无需扩展即可免费使用.

Shift+ Alt+O将照顾你.


Muh*_*dri 88

我希望这个视觉工作室代码扩展能满足您的需求:https://marketplace.visualstudio.com/items? itemName = rbbit.typescript-hero

它提供以下功能:

  • 将项目或库的导入添加到当前文件中
  • 在光标下添加当前名称的导入
  • 使用一个命令添加文件的所有缺少的导入
  • Intellisense建议符号并自动添加所需的导入"灯泡功能",修复您编写的代码
  • 排序和组织您的导入(排序和删除未使用的)
  • 打开的TS/TSX文档的代码大纲视图
  • JavaScript的所有酷炫东西!(实验阶段,下面有更好的描述.)

  • +1 给@XCS。有什么方法可以使用“组织导入”命令仅删除未使用的导入和声明而不重新排序导入? (4认同)
  • Alt + Shift + O 对于 Linux 也是如此 (3认同)
  • 感谢您让我使用这个附加组件,它太棒了!在我刚刚安装它之前,我曾经安装过自动导入扩展来处理这一小块功能(自动导入)。但是安装 TypeScript Hero 后...哇,它做了我需要它做的一切,包括在 import 语句本身中按字母顺序对依赖项进行排序,删除组件类中未使用的导入,等等! (2认同)
  • 2018 年 TS Hero 的项目维护者 [曾说过](https://gitlab.com/smartive-private/christoph/typescript-hero/issues/434#note_107457812) 他将停止扩展,因为它在实施后已经过时主要功能直接在 VS Code 中(见其他评论)。 (2认同)
  • 有没有办法在不重新排序导入的情况下调用“Alt+Shift+O”? (2认同)
  • 目前,TypeScript Hero 相对于 VS Code 的组织者的好处之一是能够分离/分组导入(例如,全局和本地导入用换行符分隔)。如果您想使用此插件在保存时组织导入,您可以在 settings.json 中添加以下内容 `"typescriptHero.imports.organizeOnSave": true` (2认同)

ken*_*nny 41

从VSCode v.1.24和TypeScript v.2.9开始:

对于Mac:option+ Shift+O

对于Win:Alt+ Shift+O

  • 对某些人来说更重要的是,命令是"Organize Imports"或`editor.action.organizeImports` (5认同)

小智 34

为了能够检测未使用的导入,代码或变量,请确保在tsconfig.json文件中有此选项

"compilerOptions": {
    "noUnusedLocals": true,
    "noUnusedParameters": true
}
Run Code Online (Sandbox Code Playgroud)

安装了typescript编译器,如果没有安装它:

npm install -g typescript
Run Code Online (Sandbox Code Playgroud)

并且在Vcode中安装了tslint扩展,这对我有用,但在启用后我注意到CPU使用量的增加,特别是在大项目上.

我还建议使用typescript hero扩展来组织你的导入.


Jay*_*Kan 30

如果您是Visual Studio的重度用户,则只需打开您的首选项设置,然后将以下内容添加到settings.json中:

...
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
  "source.organizeImports": true
}
....
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助!

  • 这似乎与 ESLint Prettier 插件冲突。它试图进行单行导入,但 ESLint 试图中断多行。 (4认同)
  • 有没有办法在保持导入排序的同时禁止删除未使用的导入? (2认同)

Mat*_*ing 6

There are already so many good answers on this thread! I am going to post this to help anybody trying to do this automatically! To automatically remove unused imports for the whole project this article was really helpful to me.

In the article the author explains it like this:

Make a stand alone tslint file that has the following in it:

{
  "extends": ["tslint-etc"],
  "rules": {
    "no-unused-declaration": true
  }
}
Run Code Online (Sandbox Code Playgroud)

Then run the following command to fix the imports:

 tslint --config tslint-imports.json --fix --project .
Run Code Online (Sandbox Code Playgroud)

Consider fixing any other errors it throws. (I did)

Then check the project works by building it:

ng build
Run Code Online (Sandbox Code Playgroud)

or

ng build name_of_project --configuration=production 
Run Code Online (Sandbox Code Playgroud)

End: If it builds correctly, you have successfully removed imports automatically!

NOTE: This only removes unnecessary imports. It does not provide the other features that VS Code does when using one of the commands previously mentioned.