ESLint - Cửa sổ Nhật Bản không được xác định. Cách cho phép các biến toàn cục trong pack.json


186

Tôi đang gán một thuộc tính cho đối tượng cửa sổ toàn cầu, nhưng khi tôi chạy eslint, tôi nhận được điều này:

"cửa sổ" không được xác định

Tôi thấy điều này ở đây trong các tài liệu eslint :

cửa sổ sau định nghĩa là biến toàn cục cho mã không kích hoạt quy tắc đang được kiểm tra:

valid: [
  {
    code: "window.alert()",
    globals: [ "window" ]
  }
]

Tôi đã thử thêm một cái gì đó như thế này vào tệp pack.json để có eslint cho phép "cửa sổ" là một biến toàn cục, nhưng tôi phải làm gì đó sai. Từ các tài liệu có vẻ như tôi có thể cần phải làm một cái gì đó như thế này trong một tệp riêng biệt, nhưng có cách nào để xác định một số biến toàn cục được phép ngay trong tệp pack.json không?


FYI, nếu bạn đang sử dụng nút và muốn nhận biết tiếng Anh globalthì bạn cần đảm bảo "node": trueđược đặt theo "env"cấu hình của mình .
Joshua Pinter

Câu trả lời:


307

Có một nội environment: browserdung bao gồm window.

Ví dụ .eslintrc.json:

"env": {
    "browser": true,
    "node": true,
    "jasmine": true
  },

Thêm thông tin: http://eslint.org/docs/user-guide/configuring.html#specifying-envirments

Xem thêm các package.jsoncâu trả lời bằng chevin99 dưới đây.


Hoàn toàn là câu trả lời tốt nhất, cảm ơn. Tôi thậm chí còn không nghĩ về điều đó :)
Hiệp sĩ Yoshi

4
Chỉ trong trường hợp người khác bị kẹt ra như tôi: Đây phải ở trong .eslintrckhôngpackage.json
Một Jar của Clay

Có cách nào để làm điều này chỉ áp dụng cho một tập tin?
AnnanFay

Tôi đã tìm thấy câu trả lời sau đây của Carles Alcolea bên dưới : Thêm ở đầu tập tin này:/* eslint-env browser */
Laoujin

102

Tôi tìm thấy nó trên trang này: http://eslint.org/docs/user-guide/configuring

Trong gói.json, điều này hoạt động:

"eslintConfig": {
  "globals": {
    "window": true
  }
}

62
cách đúng đắn để làm điều đó là sử dụng "env": {"browser": true}
Nicolas

@Nicolas, vâng, tôi có thể đã sử dụng phương thức mà bạn đề xuất nếu đó là những gì tôi đã tìm thấy trước tiên, nhưng câu trả lời này ít nhất hữu ích trong việc hiển thị bạn có thể có cấu hình eslint của bạn trong pack.json.
chevin99

4
Cũng có thể định tuyến toàn cầu cho eslint như thế này: / * góc cạnh toàn cầu: true * /
Mirko

câu hỏi đặc biệt hỏi cách sử dụng tệp
pack.json

59

Thêm .eslintrcvào gốc dự án.

{
  "globals": {
    "document": true,
    "foo": true,
    "window": true
  }
}

Bằng cách nào đó, việc đặt eslingConfig trong gói.json không hiệu quả với tôi (ngoài việc sai về mặt khái niệm). Thêm nó vào .eslintrc.json hoạt động mặc dù.
Petrunov

1
@Petrunov .eslintrc.jsonchỉ có thể là.eslintrc
Kirk Strobeck

điều này không hoạt động trong một trường hợp tôi gặp phải - tôi đang sử dụng eslint với gulp cho dự án mở rộng chrome. trong toàn cầu tôi đặt "chrome": đúng và nó vẫn đưa ra một lỗi về việc nó là một toàn cầu không được công nhận.
Stephen Tetreault

42

.Elintrc.json của bạn phải chứa văn bản bên dưới.
Bằng cách này, ESLint biết về các biến toàn cầu của bạn.

{
  "env": {
    "browser": true,
    "node": true
  }                                                                      
}

13

Tôi biết anh ấy không yêu cầu phiên bản nội tuyến . Nhưng vì câu hỏi này có gần 100 nghìn lượt truy cập và tôi đã rơi vào đây để tìm kiếm nó, tôi sẽ để nó ở đây cho người viết mã tiếp theo:

Hãy chắc chắn rằng ESLint không chạy với --no-inline-configcờ (nếu điều này không có vẻ quen thuộc, bạn có thể sẽ tốt). Sau đó, viết phần này vào tệp mã của bạn (để rõ ràng và quy ước, nó được viết ở trên cùng của tệp nhưng nó sẽ hoạt động ở bất cứ đâu):

/* eslint-env browser */

Điều này nói với ESLint rằng môi trường làm việc của bạn là một trình duyệt, vì vậy bây giờ nó biết những thứ có sẵn trong trình duyệt và điều chỉnh phù hợp.

Có rất nhiều môi trường và bạn có thể khai báo nhiều môi trường cùng một lúc, ví dụ, trong dòng:

/* eslint-env browser, node */

Nếu bạn hầu như luôn sử dụng các môi trường cụ thể, tốt nhất là đặt nó trong tệp cấu hình của ESLint và quên nó đi.

Từ tài liệu của họ :

Một môi trường xác định các biến toàn cục được xác định trước. Các môi trường có sẵn là:

  • browser - trình duyệt biến toàn cầu.
  • node - Biến toàn cục Node.js và phạm vi Node.js.
  • commonjs - Biến toàn cục CommonJS và phạm vi CommonJS (sử dụng mã này cho mã chỉ dành cho trình duyệt sử dụng Browserify / WebPack).
  • shared-node-browser - Globals chung cho cả Node và Browser.

[...]

Bên cạnh môi trường, bạn có thể làm cho nó bỏ qua bất cứ điều gì bạn muốn. Nếu nó cảnh báo bạn về việc sử dụng console.log()nhưng bạn không muốn được cảnh báo về điều đó, chỉ cần nội tuyến:

/* eslint-disable no-console */

Bạn có thể xem danh sách tất cả các quy tắc , bao gồm các quy tắc được đề xuất để có các thực tiễn mã hóa tốt nhất .


2

Nếu bạn đang sử dụng Angular, bạn có thể sử dụng :

"env": {
    "browser": true,
    "node": true
},
"rules" : {
    "angular/window-service": 0
 }
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.