คาดว่าการแพร่กระจายจะเป็น 'LF' แต่พบสไตล์การกระจาย 'CRLF'


156

เมื่อใช้ eslint ในโครงการ gulp ฉันพบปัญหากับข้อผิดพลาดเช่นนี้
Expected linebreaks to be 'LF' but found 'CRLF' linebreak-styleและฉันใช้สภาพแวดล้อม Windows สำหรับ gulp ที่กำลังทำงานอยู่และบันทึกข้อผิดพลาดทั้งหมดได้รับด้านล่าง

 Kiran (master *) Lesson 4 $ gulp
 Using gulpfile c:\Users\Sai\Desktop\web-build-tools\4\
 gulpfile.js
 Starting 'styles'...
 Finished 'styles' after 17 ms
 Starting 'lint'...
 'lint' errored after 1.14 s
 ESLintError in plugin 'gulp-eslint'
 sage: Expected linebreaks to be 'LF' but found 'CRLF'.
 ails: fileName: c:\Users\Sai\Desktop\web-build-tools\4\js\extra.js



$>Users\Sai\Desktop\web-build-tools\4\js\extra.js
error  Expected linebreaks to be 'LF' but found 'CRLF'  linebreak-style

ฉันยังได้รวมไฟล์extra.jsเป็นข้อผิดพลาดที่บ่งบอกถึงข้อผิดพลาดที่เป็นไปได้

function getWindowHeight() {
    return window.innerHeight;
}

getWindowHeight();

คำตอบ:


202

ตรวจสอบว่าคุณมีlinebreak-styleกฎการกำหนดค่าดังต่อไปนี้ใน. eslintrc ของคุณหรือในซอร์สโค้ด:

/*eslint linebreak-style: ["error", "unix"]*/

เนื่องจากคุณทำงานกับ Windows คุณอาจต้องการใช้กฎนี้แทน:

/*eslint linebreak-style: ["error", "windows"]*/

อ้างถึงเอกสารประกอบของlinebreak-style:

เมื่อพัฒนากับผู้คนจำนวนมากที่มีบรรณาธิการแตกต่างกันแอปพลิเคชัน VCS และระบบปฏิบัติการอาจเกิดขึ้นที่ปลายสายที่แตกต่างกันเขียนโดยหนึ่งในที่กล่าวถึง (อาจเกิดขึ้นโดยเฉพาะอย่างยิ่งเมื่อใช้ windows และ mac

linebreaks (บรรทัดใหม่) ที่ใช้ในระบบปฏิบัติการ windows มักจะเป็น carriage return (CR) ตามด้วย line feed (LF) ทำให้ carriage return line line (CRLF) ในขณะที่ Linux และ Unix ใช้ feed line แบบเรียบง่าย (LF) ลำดับการควบคุมที่สอดคล้องกันคือ"\n"(สำหรับ LF) และ"\r\n"(CRLF)

นี่เป็นกฎที่สามารถแก้ไขได้โดยอัตโนมัติ --fixตัวเลือกในบรรทัดคำสั่งโดยอัตโนมัติแก้ไขปัญหารายงานโดยกฎนี้

แต่ถ้าคุณต้องการที่จะรักษาCRLFจุดสิ้นสุดบรรทัดในรหัสของคุณ (ในขณะที่คุณกำลังทำงานบน Windows) อย่าใช้fixตัวเลือก


นี่เป็นเรื่องแฮ็คที่มากกว่า คำตอบอื่น ๆ โดย @The Coder นั้นถูกต้อง คุณต้องเปลี่ยนการกำหนดค่าของโครงการ
user959690

124

ฉันพบว่ามีประโยชน์ (ที่ฉันต้องการที่จะละเว้นบรรทัดฟีดและไม่เปลี่ยนแปลงไฟล์ใด ๆ ) เพื่อละเว้นพวกเขาใน. eslintrc ใช้สไตล์ linebreak ตามคำตอบนี้: https://stackoverflow.com/a/43008668/1129108

module.exports = {
  extends: 'google',
  quotes: [2, 'single'],
  globals: {
    SwaggerEditor: false
  },
  env: {
    browser: true
  },
  rules:{
    "linebreak-style": 0
  }
};

นี้. ขอบคุณสำหรับการแก้ปัญหา
blfuentes

84

หากคุณกำลังใช้ vscode และคุณอยู่ในWindows ที่ผมจะแนะนำให้คุณคลิกตัวเลือกที่ด้านล่างขวาของหน้าต่างและตั้งค่าให้ LF จาก CRLF เพราะเราไม่ควรปิดการกำหนดค่าเพียงเพื่อประโยชน์ในการลบข้อผิดพลาดบนWindows

หากคุณไม่เห็น LF / CLRF ให้คลิกขวาที่แถบสถานะแล้วเลือก Editor End of Line

เมนู


4
วิธีตั้งค่าคอนฟิเกอเรชันนี้เป็นโกลบอลในโครงการเดียวได้อย่างไร ฉันต้องทำเช่นนี้สำหรับไฟล์ทุกไฟล์
BJAA

1
การตั้งค่าระดับโลกใน VSCode น่าจะเป็น: กำหนดให้Settings -> Text Editor -> Files -> Eol \nดูเหมือนว่าจะมีผลกับไฟล์ใหม่เท่านั้น แต่คุณจะต้องสลับไฟล์ที่มีอยู่แต่ละไฟล์ด้วยตนเอง
V. Rubinetti

คำตอบที่ได้รับการยอมรับ (@Dheeraj Vepakomma) และคำตอบนี้ช่วยฉันได้เพราะพวกเขาช่วยเติมเต็มปัญหาของฉัน ขอบคุณ!
Rodrigo.A92

11

เพิ่งทำautocrlfพารามิเตอร์ในไฟล์. falsegitconfig และรีโค้ดโค้ด มันได้ผล!

[core] autocrlf = false


8

เกิดขึ้นกับฉันเพราะฉันวิ่งgit config core.autocrlf trueและฉันลืมที่จะเคารพกลับ

หลังจากนั้นเมื่อฉันชำระเงิน / ดึงรหัสใหม่ LF (break line ใน Unix) ทั้งหมดถูกแทนที่ด้วย CRLF (Break line ใน Windows)

ฉันวิ่ง linter และข้อความแสดงข้อผิดพลาดทั้งหมดอยู่ Expected linebreaks to be 'LF' but found 'CRLF'

ในการแก้ไขปัญหาฉันตรวจสอบ autocrlfค่าด้วยการเรียกใช้git config --list | grep autocrlfและฉันได้รับ:

core.autocrlf=true
core.autocrlf=false

ฉันแก้ไขการตั้งค่า GIT ทั่วโลก~/.gitconfigและแทนที่autocrlf = trueด้วยautocrlf = falseโดย

หลังจากนั้นฉันไปที่โครงการของฉันและทำสิ่งต่อไปนี้ (สมมติว่ารหัสในsrc/โฟลเดอร์):

CURRENT_BRANCH=$(git branch | grep \* | cut -d ' ' -f2);
rm -rf src/*
git checkout $CURRENT_BRANCH src/

8

หากคุณต้องการในcrlf (Windows Eol) ไปที่ File -> Preferences -> Settings พิมพ์ "end of line" ในแท็บผู้ใช้และตรวจสอบว่าFiles: Eolถูกตั้งค่าเป็น\ r \ nและหากคุณใช้ส่วนขยาย Prettier ให้ตรวจสอบว่าPrettier: End of Lineถูกตั้งค่าเป็น CRLF ป้อนคำอธิบายรูปภาพที่นี่ในที่สุดบนไฟล์ eslintrc ของคุณให้เพิ่มกฎนี้:'linebreak-style': ['error', 'windows'] ป้อนคำอธิบายรูปภาพที่นี่


1
โหวตให้รูปภาพที่มีประโยชน์ 10x
benshabatnoam

"ไปที่ไฟล์ -> การตั้งค่า -> การตั้งค่า" แอพนี้ควรทำอะไรบ้าง?
JeffreyPia

6

หากคุณกำลังใช้ vscode ฉันอยากจะแนะนำให้คุณคลิกตัวเลือกที่ด้านล่างขวาของหน้าต่างและตั้งเป็น LF จาก CRLF .. ซึ่งแก้ไขข้อผิดพลาดของฉัน


ที่นี้อยู่ที่ไหน
KansaiRobot

2
นั่นคือการแก้ไขสำหรับฉัน! 10x
Barbu Barbu

1
มันแก้ไขปัญหาของฉัน
Richard Vergis

2

หากคุณใช้WebStormและคุณใช้ Windowsฉันขอแนะนำให้คุณคลิกการตั้งค่า / แก้ไข / รหัสสไตล์ / แท็บทั่วไปและเลือก "windows (\ r \ n) จากเมนูแบบเลื่อนลงขั้นตอนเหล่านี้จะนำไปใช้กับ Rider

ป้อนคำอธิบายรูปภาพที่นี่


0

สถานการณ์เดียวกันเกิดขึ้นเมื่อฉันใช้ VSCode กับ eslint ถ้าคุณใช้ VSCode

1 - พื้นที่การคลิกที่ชื่อสามารถเป็นได้ทั้ง LF หรือ CRLF โดยที่ด้านล่างขวาของ VScode

2 - เลือก LF จากเมนูแบบเลื่อนลง

นั่นใช้ได้สำหรับฉัน

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.