Các ngắt dòng được mong đợi là 'LF' nhưng được tìm thấy theo kiểu ngắt dòng 'CRLF'


155

Khi sử dụng eslint trong dự án gulp, tôi đã gặp phải một vấn đề với lỗi như thế này
Expected linebreaks to be 'LF' but found 'CRLF' linebreak-stylevà tôi đang sử dụng môi trường Windows cho gulp đang chạy và toàn bộ nhật ký lỗi được đưa ra dưới đây

 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

Tôi cũng đã bao gồm tệp Extra.js là lỗi chỉ ra lỗi có thể xảy ra.

function getWindowHeight() {
    return window.innerHeight;
}

getWindowHeight();

Câu trả lời:


201

Kiểm tra xem bạn có linebreak-stylecấu hình quy tắc như dưới đây trong .eslintrc của bạn hoặc trong mã nguồn:

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

Vì bạn đang làm việc trên Windows, bạn có thể muốn sử dụng quy tắc này thay thế:

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

Tham khảo tài liệu của linebreak-style:

Khi phát triển với nhiều người đều có các trình soạn thảo, ứng dụng và hệ điều hành VCS khác nhau, có thể xảy ra rằng các kết thúc dòng khác nhau được viết bởi một trong hai điều được đề cập (đặc biệt có thể xảy ra khi sử dụng các phiên bản Windows và mac của SourceTree).

Các ngắt dòng (dòng mới) được sử dụng trong hệ điều hành windows thường là trả về vận chuyển (CR) theo sau là một nguồn cấp dữ liệu (LF) làm cho nó trở thành nguồn cấp dữ liệu dòng vận chuyển (CRLF) trong khi Linux và Unix sử dụng nguồn cấp dữ liệu đơn giản (LF). Các trình tự điều khiển tương ứng là "\n"(cho LF) và "\r\n"cho (CRLF).

Đây là một quy tắc có thể tự động sửa chữa. Các --fixtùy chọn trên dòng lệnh tự động sửa chữa các vấn đề báo cáo của quy tắc này.

Nhưng nếu bạn muốn giữ lại CRLFcác kết thúc dòng trong mã của mình (vì bạn đang làm việc trên Windows) thì không sử dụng fixtùy chọn này.


Đây là nhiều hơn một hack. Câu trả lời khác của @The Coder là chính xác. Bạn cần thay đổi cấu hình của dự án
user959690

123

Tôi thấy nó hữu ích (nơi tôi muốn bỏ qua các nguồn cấp dữ liệu và không thay đổi bất kỳ tệp nào) để bỏ qua chúng trong .eslintrc bằng cách sử dụng kiểu ngắt dòng theo câu trả lời này: https://stackoverflow.com/a/43008668/1129108

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

Điều này. Cảm ơn giải pháp
blfuentes

84

Nếu bạn đang sử dụng vscode và bạn đang sử dụng Windows, tôi khuyên bạn nên nhấp vào tùy chọn ở góc dưới bên phải của cửa sổ và đặt nó thành LF từ CRLF . Bởi vì chúng ta không nên tắt cấu hình chỉ vì mục đích xóa lỗi trên Windows

Nếu bạn không thấy LF / CLRF, sau đó nhấp chuột phải vào thanh trạng thái và chọn Kết thúc Trình chỉnh sửa.

thực đơn


4
Làm cách nào để đặt cấu hình này thành toàn cầu trong một dự án? tôi phải làm điều này cho mọi tập tin
BJAA

1
Cài đặt toàn cục trong VSCode dường như là : Settings -> Text Editor -> Files -> Eol, được đặt thành \n. Điều này dường như chỉ áp dụng cho các tệp mới, tuy nhiên, bạn vẫn sẽ phải chuyển từng tệp hiện có qua thủ công.
V. Rubinetti

Câu trả lời được chấp nhận (@Dheeraj Vepakomma) và câu trả lời này đều giúp tôi khi họ bổ sung cho vấn đề của tôi. Cảm ơn!
Rodrigo.A92

11

Chỉ cần tạo autocrlfparam trong tệp false.gitconfig và mã lại. Nó đã làm việc!

[core] autocrlf = false


8

Xảy ra với tôi vì tôi chạy git config core.autocrlf truevà tôi quên trở lại.

Sau đó, khi tôi kiểm tra / kéo mã mới, tất cả các dòng (dòng ngắt trong Unix) đã được thay thế bằng CRLF (Dòng ngắt trong Windows).

Tôi đã chạy linter và tất cả các thông báo lỗi là Expected linebreaks to be 'LF' but found 'CRLF'

Để khắc phục sự cố, tôi đã kiểm tra autocrlfgiá trị bằng cách chạy git config --list | grep autocrlfvà tôi đã nhận được:

core.autocrlf=true
core.autocrlf=false

Tôi đã chỉnh sửa cấu hình GIT toàn cầu ~/.gitconfigvà thay thế autocrlf = truebằng autocrlf = false.

Sau đó, tôi đã đi đến dự án của mình và làm như sau (giả sử mã trong src/thư mục):

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

8

Nếu bạn muốn nó trong crlf (Windows Eol), hãy đi tới Tệp -> Tùy chọn -> Cài đặt. Nhập "cuối dòng" trong tab Người dùng và đảm bảo Tệp: Eol được đặt thành \ r \ n và nếu bạn đang sử dụng tiện ích mở rộng Prettier, hãy đảm bảo Prettier: End of Line được đặt thành crlf . nhập mô tả hình ảnh ở đâyCuối cùng, trên tệp eslintrc của bạn, hãy thêm quy tắc này:'linebreak-style': ['error', 'windows'] nhập mô tả hình ảnh ở đây


1
Bình chọn cho những bức ảnh hữu ích, 10
benshabatnoam

"đi đến Tệp -> Tùy chọn -> Cài đặt" Ứng dụng này nên được thực hiện trong ứng dụng nào?
JeffreyPia

6

Nếu bạn đang sử dụng vscode, tôi khuyên bạn nên nhấp vào tùy chọn ở góc dưới bên phải của cửa sổ và đặt nó thành LF từ CRLF..đây đã sửa lỗi của tôi


Chính xác thì đây là ở đâu?
KansaiRobot

2
đó là cách khắc phục cho tôi! 10
Barbu Barbu

1
Nó đã khắc phục vấn đề của tôi.
Richard Vergis

2

Nếu bạn đang sử dụng WebStorm và bạn đang sử dụng Windows, tôi khuyên bạn nên nhấp vào cài đặt / trình chỉnh sửa / kiểu mã / tab chung và chọn "windows (\ r \ n) từ menu thả xuống. Các bước này cũng sẽ áp dụng cho Rider.

nhập mô tả hình ảnh ở đây


0

Tình huống tương tự xảy ra khi tôi đang sử dụng VSCode với eslint. Nếu bạn sử dụng VSCode,

1 - Nhấp vào khu vực mà tên đó có thể là cả LF hoặc CRLF ở dưới cùng bên phải của VScode.

2 - Chọn LF từ menu thả xuống.

Điều đó đã làm việc cho tôi.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.