Hướng dẫn what is require () in javascript? - Yêu cầu () trong javascript là gì?
Necromancing. IMHO, các câu trả lời hiện có để lại nhiều điều mong muốn. Show Lúc đầu, nó rất khó hiểu. Bạn có chức năng (không xác định) "yêu cầu", được sử dụng để có các mô -đun. Và trong các mô -đun (CommonJS) đã nói, bạn có thể sử dụng 5, mà không cần chúng được xác định. Không phải là mới mà bạn có thể sử dụng các biến không xác định trong JS, nhưng bạn không thể sử dụng hàm không xác định. Vì vậy, nó trông hơi giống ma thuật lúc đầu. Nhưng tất cả phép thuật dựa trên sự lừa dối.You have a (nowhere defined) function "require", which is used to get modules. And in said (CommonJS) modules, you can use 5, WITHOUT THEM EVER BEING DEFINED. Not that it would be new that you could use undefined variables in JS, but you couldn't use an undefined function. So it looks a little like magic at first. But all magic is based on deception. Khi bạn đào sâu hơn một chút, hóa ra nó thực sự khá đơn giản: yêu cầu chỉ đơn giản là một hàm (không chuẩn) được xác định ở phạm vi toàn cầu. (phạm vi toàn cầu = đối tượng cửa sổ trong trình duyệt, đối tượng toàn cầu trong nodejs). Lưu ý rằng theo mặc định, "hàm yêu cầu" chỉ được triển khai trong NodeJS, không phải trong trình duyệt. Ngoài ra, lưu ý rằng để thêm vào sự nhầm lẫn, đối với trình duyệt, có các yêu cầu, mặc dù tên chứa các ký tự "yêu cầu", các yêu cầu hoàn toàn không thực hiện/commonJS - thay vào đó không giống nhau. Đó là một điều cuối cùng chỉ là một điều quan trọng bạn phải nhận ra theo cách để hiểu yêu cầu. Bây giờ, như vậy, để trả lời câu hỏi "những gì cần thiết", chúng tôi "chỉ đơn giản là" cần biết chức năng này làm gì. Điều này có lẽ được giải thích tốt nhất với mã. Đây là một triển khai đơn giản của Michele Nasti, mã bạn có thể tìm thấy trên trang GitHub của anh ấy. Hãy gọi cho việc triển khai hàm yêu cầu tối thiểu của chúng tôi là "MyRequire":
Bây giờ bạn nhận thấy, đối tượng "FS" được sử dụng ở đây. Để đơn giản, Michele chỉ nhập mô -đun NodeJS FS:
Mà sẽ không cần thiết. Vì vậy, trong trình duyệt, bạn có thể thực hiện một triển khai đơn giản các yêu cầu với XMLHttprequest đồng bộ:
Về cơ bản, những gì yêu cầu do đó, nó có tải xuống một tệp javascript, đưa ra nó trong một không gian tên ẩn danh (AKA Function), với các tham số "yêu cầu", "xuất" và "mô-đun" và trả về chức năng và tính chất. Lưu ý rằng đánh giá này là đệ quy: bạn yêu cầu các tệp mà chính họ có thể yêu cầu các tệp. Bằng cách này, tất cả các biến "toàn cầu" được sử dụng trong mô-đun của bạn là các biến trong không gian tên chức năng viết yêu cầu và không gây ô nhiễm phạm vi toàn cầu với các biến không mong muốn. Ngoài ra, theo cách này, bạn có thể sử dụng lại mã mà không phụ thuộc vào các không gian tên, vì vậy bạn nhận được "mô -đun" trong JavaScript. "Tính mô -đun" trong các trích dẫn, bởi vì điều này không chính xác, bởi vì bạn vẫn có thể viết window.bla/global.bla, và do đó vẫn gây ô nhiễm phạm vi toàn cầu ... Ngoài ra, điều này thiết lập sự tách biệt giữa các chức năng tư nhân và công cộng, Các chức năng công cộng là xuất khẩu."modularity" in quotes, because this is not exactly true, though, because you can still write window.bla/global.bla, and hence still pollute the global scope... Also, this establishes a separation between private and public functions, the public functions being the exports. Bây giờ thay vì nói
Bạn cũng có thể nói:
và trả về một đối tượng. Ngoài ra, vì các mô -đun của bạn được đánh giá trong một hàm với các tham số "yêu cầu", "xuất" và "mô -đun", các mô -đun của bạn có thể sử dụng các biến không được khai báo "yêu cầu", "xuất" và "mô -đun", có thể gây sửng sốt. Tham số yêu cầu Tất nhiên có một con trỏ đến hàm yêu cầu được lưu vào một biến. Tuyệt, phải không? Nhìn theo cách này, yêu cầu mất phép thuật của nó, và trở nên đơn giản. Bây giờ, chức năng yêu cầu thực sự sẽ thực hiện thêm một vài kiểm tra và kỳ quặc, tất nhiên, nhưng đây là bản chất của những gì sôi sục. Ngoài ra, vào năm 2020, bạn nên sử dụng các triển khai ECMA thay vì yêu cầu:
Và nếu bạn cần nhập không tĩnh động (ví dụ: tải một polyfill dựa trên loại trình duyệt), có chức năng/từ khóa ECMA-istInport:
Lưu ý rằng nhập không đồng bộ như yêu cầu. Thay vào đó, nhập khẩu là một lời hứa, vì vậy
trở thành
Bởi vì nhập trở lại một lời hứa (không đồng bộ). Vì vậy, về cơ bản, không giống như yêu cầu, nhập thay thế fs.readFilesYNC bằng fs.readfileasync.
Điều này tất nhiên đòi hỏi chức năng nhập khẩu cũng là ASYNC.. 0Thậm chí tốt hơn, phải không? Vâng, ngoại trừ việc không có ECMA-Way để nhập tự động đồng bộ (không có lời hứa). Bây giờ, để hiểu những hậu quả, bạn hoàn toàn có thể muốn đọc về những lời hứa/ASYNC-BÀI VIẾT TẠI ĐÂY, nếu bạn không biết đó là gì. Nhưng rất chỉ đơn giản là đặt, nếu một hàm trả về một lời hứa, nó có thể được "chờ đợi": 1Lời hứa sau đó thường được sử dụng như thế này: 2Nhưng khi bạn trả lại một lời hứa, bạn cũng có thể sử dụng Await, điều đó có nghĩa là chúng tôi loại bỏ cuộc gọi lại (thực tế - thực ra, nó đang được thay thế bằng máy tính trạng thái trong trình biên dịch/thông dịch). Bằng cách này, chúng tôi làm cho mã không đồng bộ có cảm giác như đồng bộ, vì vậy bây giờ chúng tôi có thể sử dụng thử bắt để xử lý lỗi. Lưu ý rằng nếu bạn muốn sử dụng đang chờ trong một hàm, chức năng đó phải được khai báo là async (do đó là ASYNC-BÀI VIẾT). 3Và cũng xin lưu ý rằng trong JavaScript, không có cách nào để gọi hàm Async (chặn) từ một hàm đồng bộ (những cái bạn biết). Vì vậy, nếu bạn muốn sử dụng Await (AKA ECMA-ISIPPORT), tất cả mã của bạn cần phải đồng bộ hóa, rất có thể là một vấn đề, nếu mọi thứ chưa được đồng bộ ... Một ví dụ về nơi thực hiện yêu cầu đơn giản hóa này, là khi bạn yêu cầu một tệp không phải là JavaScript hợp lệ, ví dụ: Khi bạn yêu cầu CSS, HTML, TXT, SVG và hình ảnh hoặc các tệp nhị phân khác. Và thật dễ dàng để biết lý do tại sao: nếu bạn, ví dụ: Đặt HTML vào cơ thể chức năng JavaScript, tất nhiên bạn có được 4Vì 6Bây giờ, nếu bạn muốn mở rộng điều này thành ví dụ bao gồm các mô-đun, bạn chỉ có thể kiểm tra các mục tiêu tệp đã tải xuống cho 7, và sau đó, ví dụ: Eval ("Nội dung jQuery") thay vì func (hoạt động tốt miễn là bạn ở trong trình duyệt). Vì các bản tải xuống với Fetch/XMLHTTPRequests phải chịu sự chính sách tương tự và tính toàn vẹn được đảm bảo bởi SSL/TLS, việc sử dụng Eval ở đây khá vô hại, miễn là bạn đã kiểm tra các tệp JS trước khi bạn thêm chúng vào trang web của mình, nhưng điều đó Nhiều điều nên là hoạt động tiêu chuẩn.Lưu ý rằng có một số triển khai của chức năng yêu cầu giống như:
Sidenote quan trọng trên đối số chức năng "Xuất": JavaScript sử dụng chia sẻ giữa các giá trị-có nghĩa là các đối tượng được truyền như một con trỏ, nhưng giá trị con trỏ được truyền bởi giá trị, không phải bằng tham chiếu. Vì vậy, bạn không thể ghi đè xuất khẩu bằng cách gán nó một đối tượng mới. Thay vào đó, nếu bạn muốn ghi đè xuất khẩu, bạn cần gán đối tượng mới cho mô -đun. Tại sao chúng ta sử dụng yêu cầu trong JavaScript?Yêu cầu thường được sử dụng với NodeJS để đọc và thực thi các mô -đun CommonJS. Các mô-đun này có thể là các mô-đun tích hợp như HTTP hoặc các mô-đun viết tùy chỉnh. Với yêu cầu, bạn có thể đưa chúng vào các tệp JavaScript của mình và sử dụng các chức năng và biến của chúng.to read and execute CommonJS modules. These modules can be either built-in modules like http or custom-written modules. With require , you can include them in your JavaScript files and use their functions and variables.
Những gì là yêu cầu () trong nodejs?Nút.JS tuân theo hệ thống mô-đun CommonJS và hàm yêu cầu tích hợp là cách dễ nhất để bao gồm các mô-đun tồn tại trong các tệp riêng biệt.Chức năng cơ bản của yêu cầu là nó đọc một tệp JavaScript, thực thi tệp và sau đó tiến hành trả về đối tượng xuất.the easiest way to include modules that exist in separate files. The basic functionality of require is that it reads a JavaScript file, executes the file, and then proceeds to return the exports object.
Nhập khẩu và yêu cầu trong JS là gì?
Yêu cầu xác định ở đâu?Nhu cầu, yêu cầu, yêu cầu, có nghĩa là chính xác để hỏi hoặc gọi một cái gì đó là do hoặc khi cần thiết.to ask or call for something as due or as necessary. |