Bất kỳ cách nào để buộc chế độ nghiêm ngặt trong nút?


141

Không thể tìm thấy câu trả lời này ở bất cứ đâu, nhưng tôi đã tìm thấy một số danh sách gửi thư trong đó điều này đã được thảo luận, tuy nhiên chúng khá cũ và tôi không biết liệu điều này có được thực hiện hay không.

Có cách nào để buộc sử dụng chế độ nghiêm ngặt trong node.js không?

Viết "use strict";trong tất cả các tệp .js của tôi ... tốt, tôi thích nó bị buộc phải sử dụng chế độ nghiêm ngặt hơn là thêm bản tóm tắt.

Câu trả lời:


210

Theo Lloyd, bây giờ bạn có thể đặt

"use strict";

ở đầu tệp của bạn trong nút> = 0.10.7 , nhưng nếu bạn muốn toàn bộ ứng dụng của mình chạy nghiêm ngặt ( bao gồm các mô-đun bên ngoài ), bạn có thể thực hiện việc này

nút --use_strict


eek: fs.js: 1497 function emit () {^^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
j03m

1
oh O_o, vì vậy bạn không thể sử dụng hệ thống tập tin nếu bạn ép buộc nghiêm ngặt? bạn đang sử dụng phiên bản nút nào, tôi không nhận được phiên bản này vào v0.8.12
Chad Scira

1
'v0.8.16' <--- hmm lẻ. Hãy để tôi đi xác minh.
j03m

13
Trong nút v0.9.x và mới hơn, --use_strictcờ hoạt động như mong đợi.
TooTallNate

21
Lưu ý rằng --use_strictsẽ đặt chế độ nghiêm ngặt cho toàn bộ ứng dụng, bao gồm tất cả các mô-đun mở rộng, nằm ngoài tầm kiểm soát của bạn.
Lewis

59

Trong nút 0.10.7, bạn có thể thực thi chế độ nghiêm ngặt ở cấp tệp bằng cách đặt "use strict";ở đầu tệp của mình. Cuối cùng!


25

Bạn cũng có thể dùng

https://npmjs.org/package/use-strict

nghĩa là viết một lần

require('use-strict')

hoặc thậm chí tiến một bước và sử dụng

https://npmjs.org/package/node-strict

Xin lưu ý rằng use-strictsẽ bật nghiêm ngặt hơn trên mỗi mô-đun cần thiết sau khi gọi.

Nếu bạn thích một cách tiếp cận không xâm lấn, tôi đã viết một mô-đun khác

https://www.npmjs.org/package/strict-mode

cho phép chế độ nghiêm ngặt chỉ trong gói của bạn. Tôi nghĩ đó là một giải pháp "Làm những gì tôi có nghĩa".


20

Chỉ cần sử dụng "use strict";ở đầu các tập tin áp dụng. Tôi biết thật hấp dẫn khi cố gắng cắt bỏ phần soạn sẵn, nhưng đơn giản là nó không thể được thực hiện trong Javascript. Cờ nút không được đặt tên [1]

  • không có giấy tờ và không được hỗ trợ bởi chính Node.
  • đã phải đối mặt với các đề xuất để loại bỏ nó.
  • là nút cụ thể và không được hỗ trợ trong bất kỳ công cụ JavaScript nào khác.
  • là không chuẩn.
  • không giống như "use strict";bởi vì nó là một trình biên dịch toàn cầu và giống như tất cả các toàn cầu mà bạn có khả năng ảnh hưởng xấu đến mã của người khác.
  • mọi thứ đều có lỗi chế độ nghiêm ngặt và chế độ cẩu thả có thể bị các lỗi khác nhau. có nghĩa là, một số lỗi chế độ nghiêm ngặt là duy nhất cho chế độ nghiêm ngặt

Một số lập trình viên khác có thể nghĩ rằng điều này tương tự -wALLhoặc tương tự , không phải vậy. Đây là chức năng được tiêu chuẩn hóa mà bạn đang kích hoạt theo kiểu đặc biệt (phá vỡ tiêu chuẩn) và thay đổi ngữ nghĩa trình biên dịch của mọi người.

Chú thích

  1. Cờ nút là --use_strict. Đừng sử dụng nó .

1
Bạn có thể cho tôi biết nơi bạn thấy rằng nó "không được hỗ trợ bởi Node?" Có phải đó chỉ là suy luận từ thực tế rằng nó không được ghi nhận?
Pushkin

Hầu hết. Và bởi vì nó hoàn toàn không phải là một nút Node, nó là một phần của v8.
Evan Carroll

Cảm ơn bạn! Tôi tự hỏi tại sao tôi không thể tìm thấy nó trong các tài liệu Node cli .
Galen Long

18

Bạn cũng có thể cung cấp cờ nghiêm ngặt trong chỉ thị thông dịch viên shebang.

#!/usr/bin/env node --use_strict

Nhưng hiện tại (ít nhất là trước v0.9.x), nó cũng gặp phải những vấn đề tương tự được mô tả bởi các nhận xét trong câu trả lời thảo luận của @ chad-scira.


1
envkhông cho phép bạn vượt qua các tham số như vậy, phải không?
Letharion

Hoạt động với tôi, trên OSX 10.9.4.
John Lehmann

1
yeah - vẫn minh họa cho một quy ước được thi hành khủng khiếp, đó là hai dòng mã cạnh tranh phải nằm ở đầu tệp.
aaaaaa

7
Coi chừng, envsẽ hoạt động với các tham số bổ sung như thế trên OSX, nhưng không phải trên Linux.
AerandiR
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.