Чи є спосіб видалити невикористаний імпорт та декларації з Angular 2+?


139

Мені призначено взяти якийсь заплутаний код від інших розробників, які нещодавно вже покинули компанію.

Мені цікаво запитати, чи є якийсь модуль коду Visual Studio чи інші засоби, які можуть допомогти нам швидко та ефективно упорядкувати та організувати імпорт та посилання?

Наприклад, може бути сотні таких імпортів

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

може бути перетворений аналогічно

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

Або інші функції, такі як автоматичне видалення цих невикористаних імпортів та декларацій з app.module або з усіх компонентів через весь проект?

Дякуємо за будь-який відгук!


Мені теж цікаво, чи специфічний зовнішній імпорт до компонентів є погіршенням продуктивності.
Марцидій

8
stackoverflow.com/a/49697144/3914072 vscode 1,22 Shift + Alt + O - працює для мене!
Раджаб Шакіров

Це також можна зробити з командного рядка (або git hook): npmjs.com/package/organize-imports-cli
thorn̈

Відповіді:


169

Редагуючи (як пропонується в коментарях та інших людей), Visual Studio Code розвинувся і надає цю функціональну функцію, вбудовану як команда "Організувати імпорт", із такими комбінаціями клавіш за замовчуванням :

option+ Shift+ Oдля Mac

Alt + Shift + Oдля Windows


Оригінальна відповідь:

Я сподіваюся, що цього розширення коду візуальної студії вистачить ваших потреб: https://marketplace.visualstudio.com/items?itemName=rbbit.typescript-hero

Він надає такі функції:

  • Додайте імпорт вашого проекту чи бібліотеки до поточного файлу
  • Додайте імпорт для поточної назви під курсором
  • Додайте весь відсутній імпорт файлу за допомогою однієї команди
  • Intellisense, який пропонує символи та автоматично додає необхідний імпорт "Функція лампочки", яка виправляє написаний вами код
  • Сортування та впорядкування імпорту (сортування та видалення невикористаного )
  • Вид контуру коду відкритого документа TS / TSX
  • Всі класні речі також для JavaScript! (Експериментальний етап, однак, кращий опис нижче.)

Для Mac: control+ option+o

Для Win: Ctrl+ Alt+o


1
Дякую, що ввімкнули мене в цю надбудову, вона хитається! До тих пір, поки я його не встановив, у мене було встановлено розширення Auto-Import, щоб дбати про цей маленький функціонал (автоматичний імпорт). Але після встановлення TypeScript Hero ... ух, він робить усе, що мені потрібно для цього, включаючи сортування залежностей за алфавітом у самих заявах про імпорт, позбавлення від імпорту, який не використовується в класах компонентів тощо!
Марцидій

2
У 2018 році керівник проекту TS Hero заявив, що припинить розширення, оскільки воно застаріло після впровадження основних функціональних можливостей безпосередньо у Кодексі VS (див. Інші коментарі).
mattarau

2
Будь-який спосіб зателефонувати Alt+Shift+Oбез переналагодження імпорту?
XCS

Alt + Shift + O також для Linux
manuman94

155

Станом на Visual Studio Code Release 1.22, це стає безкоштовним без необхідності розширення.

Shift+ Alt+O подбає про вас.


1
Приємно! Я використовую ctrl + shift + - з тих пір, і тепер я можу знайти та змінити ярлик.
GeorgiG

Мені довелося встановити його, не прийшов в інсталяцію 1,37,1
старий монах

57

Якщо ви великий користувач візуальної студії, ви можете просто відкрити налаштування налаштувань і додати наступне до налаштувань.json:

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

Сподіваємось, це може бути корисним!


3
Здається, це суперечить плагіну ESLint Prettier. Він намагається здійснити імпорт в один рядок, але ESLint намагається пробити декілька рядків.
Річард

Та ж проблема, що і @Richard. Здається, це відкрите питання - github.com/prettier/prettier-vscode/isissue/716
Крейг

Чи є спосіб відключити видалення невикористаного імпорту, зберігаючи сортування імпорту?
sunknudsen

чудова відповідь. шукали цього віками
Аамір Африді

41

Щоб мати можливість виявити невикористаний імпорт, код або змінні, переконайтеся, що у вас є ці параметри у файлі tsconfig.json

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

встановити компілятор машинопису, якщо не встановити його за допомогою:

npm install -g typescript

і розширення tslint, встановлене у Vcode, це працювало для мене, але після включення я помічаю збільшення кількості використання процесора, особливо на великих проектах.

Я б також рекомендував використовувати розширення героїв машинопису для організації вашого імпорту.


41

Оскільки VSCode v.1.24 та TypeScript v.2.9:

Для Mac: option+ Shift+O

Для Win: Alt+ Shift+O


7
Більш важливим для Organize Importseditor.action.organizeImports
когось

@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 , тому я думаю, що це рішення більше не працює.
Юсуф Хан

Я використовую версію tslint5.20.1
Юсуф Хан

0

перейдіть до свого tslint.jsonі змініть значення властивості no-unused-variableнаfalse


3
Це якраз протилежне тому, що просив ОП. Він / він хоче НЕ мати невикористаних змінних, тому no-unused-variableмає бути правдою. Запитано, чи виправлення (видалення невикористаних змінних) можна зробити автоматично, на що вже відповіли.
mattarau
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.