มีวิธีลบการนำเข้าและการประกาศที่ไม่ได้ใช้ออกจาก 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 - ใช้ได้ผลกับฉัน!
Krab Shakirov

สามารถทำได้จากบรรทัดคำสั่ง (หรือ git hook) เช่นกัน: npmjs.com/package/organize-imports-cli
thorn̈

คำตอบ:


171

แก้ไข (ตามที่แนะนำในความคิดเห็นและบุคคลอื่น ๆ ) 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
ขอบคุณที่เปลี่ยนฉันให้เป็นส่วนเสริมนี้มันยอดเยี่ยมมาก! จนกระทั่งฉันเพิ่งติดตั้งฉันเคยติดตั้งส่วนขยายการนำเข้าอัตโนมัติเพื่อดูแลฟังก์ชันการทำงานเล็ก ๆ น้อย ๆ นั้น (การนำเข้าอัตโนมัติ) แต่หลังจากติดตั้ง TypeScript Hero ... ว้าวมันทำทุกอย่างที่ฉันต้องทำรวมถึงการเรียงลำดับการอ้างอิงตามลำดับตัวอักษรภายในคำสั่งการนำเข้าด้วยตัวเองการกำจัดการนำเข้าที่ไม่ได้ใช้ในคลาสส่วนประกอบ ฯลฯ !
Marcidius

2
ในปี 2018 ผู้ดูแลโครงการของ TS Hero ได้กล่าวว่าเขาจะยุติส่วนขยายนี้เนื่องจากมันล้าสมัยไปแล้วหลังจากใช้ฟังก์ชันหลักใน VS Code โดยตรง (ดูผู้มาเยี่ยมชมคนอื่น ๆ )
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
พระเก่า

58

หากคุณเป็นผู้ใช้วิชวลสตูดิโอจำนวนมากคุณสามารถเปิดการตั้งค่าความต้องการของคุณและเพิ่มสิ่งต่อไปนี้ใน settings.json ของคุณ:

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

หวังว่านี่จะเป็นประโยชน์!


3
ดูเหมือนว่าจะขัดแย้งกับปลั๊กอิน ESLint Prettier กำลังพยายามสร้างการนำเข้าแบบบรรทัดเดียว แต่ ESLint พยายามแบ่งออกเป็นหลายบรรทัด
Richard

ปัญหาเดียวกับ @Richard ดูเหมือนจะเป็นปัญหาที่เปิดอยู่ - github.com/prettier/prettier-vscode/issues/716
Craig

มีวิธีปิดการลบการนำเข้าที่ไม่ได้ใช้งานในขณะที่ยังคงเรียงลำดับการนำเข้าอยู่หรือไม่
sunknudsen

คำตอบที่ดี มองหาสิ่งนี้มานานแล้ว
Aamir Afridi

41

เพื่อให้สามารถตรวจจับการนำเข้าโค้ดหรือตัวแปรที่ไม่ได้ใช้ตรวจสอบให้แน่ใจว่าคุณมีตัวเลือกนี้ในไฟล์tsconfig.json

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

มีการติดตั้งคอมไพเลอร์ typescript หากไม่ติดตั้งด้วย:

npm install -g typescript

และส่วนขยายtslint ที่ติดตั้งใน Vcode สิ่งนี้ใช้ได้ผลสำหรับฉัน แต่หลังจากเปิดใช้งานฉันสังเกตเห็นปริมาณการใช้งาน CPU ที่เพิ่มขึ้นโดยเฉพาะในโครงการขนาดใหญ่

ฉันขอแนะนำให้ใช้ส่วนขยายtypescript Heroเพื่อจัดระเบียบการนำเข้าของคุณ


41

ตั้งแต่ VSCode v.1.24 และ TypeScript v.2.9:

สำหรับ Mac: option+ Shift+O

สำหรับ Win: Alt+ Shift+O


7
สำคัญกว่าสำหรับบางคนคำสั่งคือOrganize Importsหรือeditor.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

ฉันใช้เวอร์ชัน tslint5.20.1
Yousuf Khan

0

ไปที่ของคุณtslint.jsonและเปลี่ยนค่าของคุณสมบัติno-unused-variableเป็นfalse


3
ตรงข้ามกับที่ OP ถามทุกประการ เขา / เขาไม่ต้องการให้มีตัวแปรที่ไม่ได้ใช้ดังนั้นno-unused-variableควรเป็นจริง สิ่งที่ถูกถามคือการแก้ไข (การลบตัวแปรที่ไม่ได้ใช้) สามารถทำได้โดยอัตโนมัติหรือไม่ซึ่งได้รับคำตอบแล้ว
mattarau
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.