javascript - ทำไม Prettier ถึงไม่จัดรูปแบบโค้ดใน VS Code?
ในแอปพลิเคชัน Nuxt ของฉันที่ติดตั้งและเปิดใช้งาน ESlint และ Prettier แล้ว ฉันสลับไปใช้ Visual Studio Code
เมื่อฉันเปิดไฟล์ .vue และกด CMD+ Shift + P แล้วเลือก Format Document ไฟล์ของฉันก็ไม่ได้รับการจัดรูปแบบเลย
การตั้งค่า .prettierrc ของฉัน:
{
"tabWidth": 2,
"semi": false,
"singleQuote": true
}
ฉันมีบรรทัดโค้ดต้นฉบับมากมาย จนไม่สามารถจัดรูปแบบด้วยตนเองได้ ฉันกำลังทำอะไรผิดไป?
คำตอบ #1
- เลือก
File -> Preferences -> Settings(Ctrl+comma) และค้นหาแบบฟอร์มformatter ตั้ง Prettier เป็นตัวจัดรูปแบบเริ่มต้น
ถ้าข้างต้นไม่ทำงาน:
ctrl+shift+p > Format Document With... > Configure Default Formatter... > Prettier - Code formatterนี่ก็ใช้ได้กับ ctrl+shift+I
คำตอบ #2
ถ้าการทำตามที่ @Simin Maleki กล่าวมานั้นไม่แก้ปัญหาของคุณ มีความเป็นไปได้ว่าตัวจัดรูปแบบเริ่มต้นของคุณไม่ได้ถูกตั้งค่า:
File > Preferences > Settings > Search for "default formatter"
ตรวจสอบให้แน่ใจว่าฟิลด์ Editor: Default Formatter ของคุณไม่ใช่ null แต่เป็น Prettier - Code formatter (esbenp.prettier-vscode) และภาษาทั้งหมดด้านล่างถูกติ๊ก นี่แก้ปัญหาของฉันได้
คู่มือทีละขั้นตอน
นอกจากนี้ให้ตรวจสอบด้วยว่าฟอร์แมตของคุณในการบันทึกถูกเปิดใช้งาน:
คำตอบ #3
บางครั้ง Prettier จะหยุดทำงานเมื่อมีข้อผิดพลาดทางไวยากรณ์ในโค้ด คุณสามารถดูข้อผิดพลาดได้โดยการคลิกที่ปุ่ม x ที่มุมล่างขวาข้าง Prettier
คำตอบ #4
Prettier สามารถจัดรูปแบบไฟล์ของคุณเมื่อบันทึกได้เช่นกัน
อย่างไรก็ตาม การติดตั้งและเปิดใช้งานไม่ได้ส่งผลให้ทำงานได้
คุณต้องตรวจสอบ "จัดรูปแบบเมื่อบันทึก" ใน VSCode: การตั้งค่า >> ผู้ใช้งาน >> ตัวแก้ไขข้อความ >> การจัดรูปแบบ
คำตอบ #5
คุณเพียงแค่ต้องกำหนดค่า ตัวจัดรูปแบบเริ่มต้น ของคุณและทำเครื่องหมายในช่อง จัดรูปแบบเมื่อบันทึก ในการตั้งค่า หลังจากติดตั้ง prettier เพื่อให้มันทำงาน อย่าปรับแต่งไฟล์กำหนดค่าอื่น ๆ
1 - เลือกตัวจัดรูปแบบเริ่มต้น
- เปิด
ไฟล์ -> การตั้งค่า -> การตั้งค่า(หรือ Ctrl + , ใน Windows) - ค้นหา
Editor: Default Formatter - เลือก ตัวจัดรูปแบบเริ่มต้น ของคุณเป็น
Prettier - Code Formatter;
ดูภาพด้านล่าง;
2 - จัดรูปแบบเมื่อบันทึก
- เปิด
ไฟล์ -> การตั้งค่า -> การตั้งค่า(หรือ Ctrl + , ใน Windows) - ค้นหา
Editor: Format on Save - คลิกที่ช่องทำเครื่องหมายใต้
Format On Save;
ดูภาพด้านล่าง;
คำตอบ #6
การปิดและเปิดใช้งานส่วนขยาย prettier แก้ปัญหาของฉันได้
คำตอบ #7
คุณสามารถลองเพิ่มส่วนนี้ไปยังไฟล์ settings.json ของ VS Code ของคุณได้ไหม?
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
},
คำตอบ #8
ฉันไม่ได้ใช้ Vue แต่ก็เจอปัญหาเดียวกัน
ฉันมีการตั้งค่าแล้ว
Editor: ตัวจัดรูปแบบเริ่มต้นเป็น prettierEditor: Format on Saveเป็นtrue- ฉันมีไฟล์
.eslintrc.jsและ.prettierrcแล้ว แต่ก็ไม่สำเร็จอะไรสักอย่าง
ทางออกสำหรับปัญหาของฉันคือฉันได้ตั้งค่าทุกอย่างเรียบร้อยแล้ว ยกเว้นว่าฉันยังต้อง:
Command+Shift+p- พิมพ์
format document with - เลือก
กำหนดตัวจัดรูปแบบเริ่มต้น... - เลือก
Prettierเป็นค่าเริ่มต้น
ฉันไม่รู้ว่าทำไมการตั้งค่า Editor: Format on Save เป็น true จึงไม่เพียงพอ ฉันจำเป็นต้องเลือกตัวจัดรูปแบบเริ่มต้นโดยใช้ขั้นตอนด้านบนเพื่อให้มันทำงานได้
คำตอบ #9
สามขั้นตอนนี้อาจแก้ปัญหาของคุณได้:
1 - ไปที่การตั้งค่า แล้วค้นหา auto format
2 - เลือก ตัวแก้ไขข้อความ
3 - เลือก esbenp.prettier-vscode เป็นตัวจัดรูปแบบเริ่มต้นของคุณ
กล่าวง่ายๆ ให้ไปที่ การตั้งค่า > แท็บผู้ใช้ > ตัวแก้ไขข้อความ > ตัวแก้ไข: ตัวจัดรูปแบบเริ่มต้น และเปลี่ยนเป็น prettier
คำตอบ #10
บนวินโดวส์:
เราสามารถเปิดไฟล์ด้านล่างได้โดยใช้:
Start > Run
เส้นทางไฟล์:
%AppData%\Code\User\settings.json
เปลี่ยนจาก:
"[javascript]": {
"editor.defaultFormatter": "vscode.typescript-language-features"
},
ถึง :
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
หมายเหตุ :
- ถ้าสิ่งที่กล่าวมาข้างต้นไม่ปรากฏ ให้เพิ่มมันแทนการเปลี่ยนแปลง
- คุณควรติดตั้ง "Prettier - code formatter" เรียบร้อยแล้วเพื่อดูผลของการเปลี่ยนแปลงข้างต้น - https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode
คำตอบ #11
คุณยังคงเจอปัญหาได้แม้จะมีการตั้งค่าทั้งหมดเหล่านี้ ในกรณีนี้ ตามที่ได้ชี้ไปในคำตอบก่อนหน้านี้ นั่นจะเป็นจุดที่ดีในการตรวจสอบการแจ้งเตือนของ Prettier ที่แถบสถานะด้านล่างใน VSCode
เมื่อคลิกที่สถานะนั้น แผงผลลัพธ์ควรรายงานปัญหาในไฟล์ HTML สำหรับฉัน ปัญหาคือฉันมี div อยู่ภายในแท็ก p ซึ่งฉันคิดว่ามาตรฐานของ prettier/VSCode ไม่แนะนำ เมื่อฉันลบมันออก (และรวมกับการตั้งค่าทั้งหมดข้างต้น ได้แก่ default formatter และ format on save) ฉันก็ทำให้ prettier ทำงานได้
.prettierrc ไม่จำเป็นต้องใช้ เว้นแต่คุณต้องการแทนที่การตั้งค่า VSCode
คำตอบ #12
สำหรับฉัน ปัญหาคือกับไฟล์ HTML ที่การจัดรูปแบบหยุดทำงานในวันหนึ่ง ฉันได้ตั้งค่า จัดรูปแบบเมื่อบันทึก ซึ่งทำงานกับไฟล์ทั้งหมดยกเว้น HTML
จากนั้นฉันก็ตระหนักว่าฉันได้ตั้งค่า โหมดจัดรูปแบบเมื่อบันทึก เป็น modification แทนที่จะเป็น file แบบทดลอง และลืมไป ซึ่งสิ่งนี้ส่งผลทำให้ไม่จัดรูปแบบอะไรในไฟล์ HTML แปลกใจที่แม้แต่การเปลี่ยนแปลงของฉันก็ไม่ได้รับการจัดรูปแบบ การตั้งค่ากลับไปเป็น file ก็แก้ปัญหาได้
คำตอบ #13
เพียง คลิกขวา ที่ใดก็ได้ในพื้นที่ที่การจัดรูปแบบโค้ดไม่ทำงานตามที่คาดไว้
แล้วเลือก จัดรูปแบบเอกสารด้วย.. จากเมนูบริบท
จากนั้นคลิกที่ กำหนดค่า Formatter เริ่มต้น...
แล้วคลิกที่ Prettier ในรายการนี้
น่าจะสามารถแก้ปัญหาได้หลังจากทำการเปลี่ยนแปลงในไฟล์บางส่วนและบันทึกมัน
คำตอบ #14
นี่ไม่ใช่ปัญหาของ Prettier เอง แต่เป็นของ prettier-vscode ซึ่งเป็นส่วนขยายของ VSCode ตามเอกสารของมัน การจัดรูปแบบ Vue จะถูกปิดโดยค่าเริ่มต้น:
prettier.disableLanguages (ค่าเริ่มต้น: ["vue"])
รายการรหัสภาษาเพื่อปิดการใช้งานส่วนขยายนี้ จำเป็นต้องรีสตาร์ท หมายเหตุ: การปิดการใช้งานภาษาที่เปิดใช้งานในโฟลเดอร์หลักจะป้องกันการจัดรูปแบบ แทนที่จะให้ตัวจัดรูปแบบอื่นทำงาน
ในกรณีนี้ หากต้องการเปิดใช้งาน คุณควรตั้งค่า "prettier.disableLanguages": [] และเนื่องจากนี่เป็นการตั้งค่าของส่วนขยาย คุณควรทำในไฟล์การตั้งค่า VSCode ไม่ใช่ .prettierrc
คำตอบ #15
ในกรณีของฉันมันถูกแย่งโดยตัวจัดรูปแบบของ TypeScript
มันทำให้ฉันบ้าเพราะมันคอยจัดรูปแบบช่องว่างของฉันใหม่อยู่เรื่อย ๆ!
เพื่อแก้ไขฉันได้ทำ cmd+. (การตั้งค่า) พิมพ์ -> "ตัวจัดรูปแบบเริ่มต้น"
และไทป์สคริปต์ที่ไม่ได้ตรวจสอบ
คำตอบ #16
วิธีการจัดรูปแบบโค้ดของคุณผ่านปลั๊กอิน ESlint ของ VScode
เอาล่ะ แทนที่จะให้คำแนะนำเกี่ยวกับวิธีการใช้ส่วนขยาย Prettier ของ VScode ฉันอยากจะอธิบายวิธีพึ่งพา ESlint และมีทั้งสองสิ่ง: ตรวจสอบให้แน่ใจว่าโค้ดของคุณถูกต้อง (ESlint) จากนั้นจัดรูปแบบมัน (Prettier)
ข้อดีของสิ่งนี้คืออะไร?
- ไม่บังคับให้ ทีมทั้งหมดของคุณ ใช้ VScode กับส่วนขยาย Prettier บางคนอาจชอบ Vim, Webstorm ของ IntelliJ, Emacs ฯลฯ... สำหรับผมแล้ววิธีแก้ปัญหาที่ไม่ขึ้นอยู่กับเครื่องมือใดๆ มักจะดีกว่าเสมอ
- ฉันคิดว่าการตรวจสอบโค้ดของคุณมีความสำคัญมากกว่าการจัดรูปแบบ แต่ถ้าคุณมีทั้งสองส่วนขยายทำงานพร้อมกัน คุณอาจพบความขัดแย้งระหว่างการจัดรูปแบบกับการตรวจสอบโค้ด
- ฮาร์ดแวร์ของคุณจะทำงานได้ดีขึ้นหากคุณมีการใช้งานส่วนขยายให้น้อยลง (หลักๆ เพราะมันสามารถหยุดความขัดแย้งได้)
- การใช้ชุดรวม ESlint + Prettier จะช่วยลดความจำเป็นในการมีการตั้งค่าส่วนบุคคลเฉพาะนอกเหนือจากฐานโค้ด (ที่ไม่ได้ติดตาม) คุณยังจะได้รับประโยชน์จากการมีข้อกำหนด ESlint ที่เฉพาะสำหรับ Vue/Nuxt และการตั้งค่าที่ง่ายขึ้น/ใช้ได้ทั่วไปมากขึ้น
- การกำหนดค่า ESLint สามารถถูกตั้งค่าให้รันก่อนการ commit, ใน CI/CD หรือที่ไหนก็ได้จริงๆ
จะทำให้ได้การตั้งค่าประเภทนี้ได้อย่างไร?
เริ่มแรกด้วยการติดตั้งส่วนขยาย ESlint เพียงตัวเดียว อย่า ติดตั้งตัว Prettier
ยังไม่ได้ติดตั้ง Vetur หรือ?
ฉันขอแนะนำอย่างยิ่งสำหรับแอป Vue2 (ซึ่ง Nuxt กำลังใช้งานอยู่ในปัจจุบัน) คุณสามารถหามันได้ด้านล่าง มันจะช่วยให้คุณสามารถใช้ ESlint (+ Prettier) กับไฟล์ .vue ได้อย่างรวดเร็วและง่ายดาย
เมื่อเสร็จแล้ว ให้เข้าถึง Command Palette โดยกด ctrl+shift + p (Windows/Linux) หรือ cmd + shift + p (Mac) และพิมพ์ Preferences: Open Default Settings (JSON)
ที่นั่น คุณควรมีบางอย่างแบบนี้
{
"workbench.colorTheme": "Solarized Dark", // example of some of your own configuration
"editor.codeActionsOnSave": {
"source.fixAll": true,
},
"eslint.options": {
"extensions": [
".html",
".js",
".vue",
".jsx",
]
},
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"html",
"vue",
],
}
จะทดสอบอย่างไรว่าการตั้งค่าของคุณใช้งานได้แล้ว?
เพื่อดูว่าโซลูชันของฉันทำงานหรือไม่ โปรดดาวน์โหลดรีโปนี้จาก Github, ติดตั้ง Node เวอร์ชันที่เสถียรล่าสุด (เช่น: 14) และรัน yarn เพื่อให้มันทำงาน มิฉะนั้น เพียงเปิด VScode
รีโปนี้ยังสามารถใช้ตรวจสอบว่ารีโปของคุณถูกตั้งค่าอย่างถูกต้องโดยการตรวจสอบไฟล์ของฉันที่นั่น!
จากนั้นคุณสามารถเข้าถึงไฟล์ .js หรือ .vue ใดก็ได้และดูปัญหาที่อยู่ที่นั่น (Command Palette: Problems: Focus on Problems View) nuxt.config.js และ /pages/index.vue เป็นตัวอย่างที่ดี นี่คือไฟล์ index.vue
คุณสามารถเห็นว่าเรามีหลายสิ่งที่สามารถแก้ไขได้โดย Prettier แต่เราก็ยังมีข้อผิดพลาด eslint(vue/require-v-for-key) อยู่ด้วย โซลูชันมีให้เป็นความคิดเห็นด้านล่างนี้ด้วย
ป.ล.: ถ้าคุณต้องการให้มีการเตือน/ข้อผิดพลาดของ ESlint แบบในบรรทัดเดียวเหมือนในภาพหน้าจอ คุณสามารถติดตั้ง Error Lens ซึ่งเป็นส่วนขยายที่ยอดเยี่ยมมากถ้าคุณต้องการกำจัดข้อผิดพลาด
บันทึกไฟล์นี้ และคุณจะเห็นว่าสิ่งที่สามารถแก้ไขอัตโนมัติได้ทั้งหมดถูกทำให้เรียบร้อยสำหรับคุณ โดยปกติจะเป็นปัญหาของ Prettier เป็นหลัก แต่บางครั้งก็อาจเป็น ESlint ด้วย เนื่องจากเรามีกฎของ ESlint จาก Nuxt คุณจึงจะได้แนวทางปฏิบัติที่ดีออกมาโดยอัตโนมัติด้วยเช่นกัน!
ทาดา มันใช้ได้แล้ว! ถ้าไม่ใช่ ลองอ่านส่วนที่อยู่ท้ายคำตอบของฉัน
ถ้าคุณต้องการสร้างโปรเจกต์ใหม่เอี่ยม
คุณสามารถรัน npx create-nuxt-app my-super-awesome-project และเลือกสิ่งต่าง ๆ บางอย่างที่นั่น สิ่งที่สำคัญที่สุดคือ Linting tools: Eslint + Prettier แน่นอน (กด space เพื่อเลือกใช้อันใดอันหนึ่ง)
คำเตือน: ตั้งแต่วันนี้เป็นต้นไป มีขั้นตอนเพิ่มเติมที่ต้องทำเพื่อให้ ESlint + Prettier ทำงานได้อย่างถูกต้องตามที่แสดงในประเด็นของ Github การแก้ไขควรถูกปล่อยในไม่ช้า จากนั้นการกำหนดค่าข้างล่างนี้จะไม่จำเป็นอีกต่อไป!
ในการแก้ไขปัญหานี้ ให้รัน yarn add -D eslint-plugin-prettier และตรวจสอบให้แน่ใจว่าไฟล์ .eslintrc.js ของคุณเป็นดังนี้
module.exports = {
root: true,
env: {
browser: true,
node: true
},
parserOptions: {
parser: '@babel/eslint-parser',
requireConfigFile: false
},
extends: [
'@nuxtjs',
'plugin:prettier/recommended', // this line was updated
'prettier'
],
plugins: [
],
// add your custom rules here
rules: {}
}
จากนั้นคุณก็สามารถทำให้มันทำงานได้อย่างสมบูรณ์เหมือนข้างต้น บันทึกไฟล์และมันควรจะรัน ESlint แล้วตามด้วย Prettier ทีละตัว!
ถ้าคุณยังมีปัญหาอยู่บ้าง
- ลองใช้
Command Paletteอีกครั้งและESLINT: restart ESLint Serverหรือแม้แต่Developer: Reload Window - อย่าลังเลที่จะฝากความคิดเห็นหรือ ติดต่อฉันหากคุณต้องการความช่วยเหลือ
คำตอบ #17
1. ใช้อีกส่วนขยายเพราะ Prettier ใช้ไม่ได้สำหรับฉัน ฉันจึงใช้ส่วนขยาย VSCODE อีกตัวชื่อว่า PrettierNow ฉันคิดว่านี่จะช่วยได้ สำเร็จสำหรับฉันแล้ว ตรวจสอบส่วนขยายได้ที่นี่
2. จากการอัปเดตล่าสุดของ prettier คุณจำเป็นต้องเพิ่มไฟล์ .prettierrc ในโฟลเดอร์หลักของโปรเจกต์ของคุณหากคุณต้องการใช้ prettier ตัวอย่างของ .prettierrc คือแบบนี้-
{
"tabWidth": 4,
"singleQuote": true,
"semi": false
}


















