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


139

我受命从最近已经离开公司的其他开发人员那里获取一些混乱的代码。

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

例如,可能有数百个这样的进口

import { AutoCompleteModule,InputSwitchModule } from 'primeng/primeng';
import { ListboxModule } from 'primeng/primeng';

可以类似地转换为

import { AutoCompleteModule,
         InputSwitchModule,
         ListboxModule  } from 'primeng/primeng';

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

感谢您的任何反馈!


我也很想知道,是否特别将多余的组件导入组件会降低性能。
Marcidius

8
stackoverflow.com/a/49697144/3914072 vscode 1.22 Shift + Alt + O-适用于我!
Rajab Shakirov

也可以从命令行(或git hook)完成:npmjs.com/package/organize-imports-cli
thorn

Answers:


167

编辑(如评论和其他人的建议),Visual Studio Code已经发展,并以命令“组织导入”的方式内置了此功能,并具有以下默认键盘快捷键

option+ Shift+ O对于Mac

Alt + Shift + O对于Windows


原始答案:

我希望这个Visual Studio代码扩展可以满足您的需求:https : //marketplace.visualstudio.com/items? itemName =rbbit.typescript-hero

它提供以下功能:

  • 将项目或库的导入添加到当前文件中
  • 在光标下为当前名称添加导入
  • 使用一个命令添加所有丢失的文件导入
  • Intellisense会建议符号并自动添加所需的导入“灯泡功能”,以修复您编写的代码
  • 整理和整理您的进口商品(整理和删除未使用的商品
  • 您打开的TS / TSX文档的代码大纲视图
  • JavaScript的所有很棒的东西!(虽然处于实验阶段,但在下面有更好的描述。)

对于Mac:control+ option+o

对于赢:Ctrl+ Alt+o


1
感谢您将我带到此附加组件上,它真是令人震惊!在我刚安装它之前,我曾经安装过Auto-Import扩展程序来照顾这一小功能(自动导入)。但是,在安装TypeScript Hero之后……哇,它会做我需要做的所有事情,包括在导入语句本身中按字母顺序对依赖项进行排序,摆脱未在组件类中使用的导入等!
Marcidius

2
在2018年,TS Hero的项目维护人员表示他将停止扩展,因为在直接在VS Code中实现主要功能后,该扩展已过时(请参阅其他说明)。
mattarau

1
有什么电话可以Alt+Shift+O不重新订购进口商品?
XCS

也适用于Linux的Alt + Shift + O
manuman94

155

从Visual Studio Code Release 1.22开始,此功能免费提供,无需扩展。

Shift+ Alt+O会照顾您的。


1
真好!我一直以来都在使用ctrl + shift +-,现在我可以找到并更改快捷方式了。
GeorgiG

我必须安装它,而没有安装我的1.37.1
old-monk

57

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

...
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
  "source.organizeImports": true
}
....

希望这会有所帮助!


3
这似乎与ESLint Prettier插件冲突。它试图进行单行导入,但是ESLint试图分成多行。
理查德

与@Richard相同的问题。似乎是一个未解决的问题-github.com/prettier/prettier-vscode/issues/716
Craig

有没有一种方法可以在保持进口分类的同时禁用删除未使用的进口?
sunknudsen

好答案。多年来一直在寻找这个
Aamir Afridi

41

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

"compilerOptions": {
    "noUnusedLocals": true,
    "noUnusedParameters": true
}

安装了打字稿编译器,如果没有安装的话:

npm install -g typescript

和在Vcode中安装的tslint扩展名,这对我来说很有效,但是启用后,我注意到CPU使用量增加了,特别是在大型项目上。

我也建议使用打字稿英雄扩展来组织您的导入。


41

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

对于Mac:option+ Shift+O

对于赢:Alt+ Shift+O


7
一些更重要的,命令Organize Importseditor.action.organizeImports
pcnate

@pcnate有没有办法在保持导入排序的同时禁用删除未使用的导入?
sunknudsen

11

这个线程已经有很多好的答案!我将发布此消息以帮助尝试自动执行此操作的任何人!为了自动删除整个项目的未使用导入,本文对我确实很有帮助。

在文章中,作者这样解释:

制作一个包含以下内容的独立tslint文件:

{
  "extends": ["tslint-etc"],
  "rules": {
    "no-unused-declaration": true
  }
}

然后运行以下命令来修复导入:

 tslint --config tslint-imports.json --fix --project .

考虑解决它引发的任何其他错误。(我做到了)

然后通过构建来检查项目的工作情况:

ng build

要么

ng build name_of_project --configuration=production 

结束:如果构建正确,则说明您已成功成功自动删除了导入!

注意:这只会删除不必要的导入。使用前面提到的命令之一时,它不提供VS Code提供的其他功能。


我知道了Could not find implementations for the following rules specified in the configuration: no-unused-declaration ,所以我猜这个解决方案不再起作用了。
Yousuf Khan

我正在使用tslint版本5.20.1
Yousuf Khan,

0

转到您的tslint.json并将属性值更改no-unused-variablefalse


3
这与OP要求的完全相反。他/她希望没有未使用的变量,因此no-unused-variable应该为真。所要问的是,是否可以自动完成修复(删除未使用的变量),这一问题已经得到解决。
mattarau
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.