Các phiên bản cũ của JavaScript không có nhập khẩu, bao gồm hoặc yêu cầu, vì vậy nhiều cách tiếp cận khác nhau đối với vấn đề này đã được phát triển.
Nhưng kể từ năm 2015 [ES6], JavaScript đã có tiêu chuẩn mô -đun ES6 để nhập các mô -đun vào Node.js, cũng được hỗ trợ bởi hầu hết các trình duyệt hiện đại.
Để tương thích với các trình duyệt cũ hơn, các công cụ xây dựng như webpack và rollup và/hoặc các công cụ chuyển đổi như Babel có thể được sử dụng.
Mô -đun ES6
Các mô -đun ECMAScript [ES6] đã được hỗ trợ trong Node.js kể từ v8.5, với cờ
export function hello[] {
return "Hello";
}
7 và vì ít nhất là Node.js v13.8.0 mà không có cờ. Để kích hoạt "ESM" [so với hệ thống mô-đun theo kiểu CommonJS trước đây của Node.js ["CJS"]] bạn sử dụng export function hello[] {
return "Hello";
}
8 trong export function hello[] {
return "Hello";
}
9 hoặc cung cấp cho các tệp tiện ích mở rộng import { hello } from './module.js';
let val = hello[]; // val is "Hello";
0. [Tương tự, các mô -đun được viết bằng mô -đun CJS trước đây của Node.js có thể được đặt tên import { hello } from './module.js';
let val = hello[]; // val is "Hello";
1 nếu mặc định của bạn là ESM.]Sử dụng
export function hello[] {
return "Hello";
}
9:{
"type": "module"
}
Sau đó
import { hello } from './module.js';
let val = hello[]; // val is "Hello";
3:export function hello[] {
return "Hello";
}
Sau đó
import { hello } from './module.js';
let val = hello[]; // val is "Hello";
4:import { hello } from './module.js';
let val = hello[]; // val is "Hello";
Sử dụng
import { hello } from './module.js';
let val = hello[]; // val is "Hello";
0, bạn sẽ có import { hello } from './module.js';
let val = hello[]; // val is "Hello";
6:export function hello[] {
return "Hello";
}
Sau đó
import { hello } from './module.js';
let val = hello[]; // val is "Hello";
7:import { hello } from './module.mjs';
let val = hello[]; // val is "Hello";
Mô -đun Ecmascript trong trình duyệt
Các trình duyệt đã hỗ trợ trực tiếp cho việc tải các mô -đun Ecmascript [không cần công cụ như webpack] kể từ Safari 10.1, Chrome 61, Firefox 60 và Edge 16. Kiểm tra hỗ trợ hiện tại tại Caniuse. Không cần phải sử dụng tiện ích mở rộng
import { hello } from './module.js';
let val = hello[]; // val is "Hello";
0 của Node.js; Các trình duyệt hoàn toàn bỏ qua các phần mở rộng tệp trên các mô -đun/tập lệnh.
import { hello } from './hello.mjs'; // Or the extension could be just `.js`
hello['world'];
// hello.mjs -- or the extension could be just `.js`
export function hello[text] {
const div = document.createElement['div'];
div.textContent = `Hello ${text}`;
document.body.appendChild[div];
}
Đọc thêm tại //jakearchibald.com/2017/es-modules-in-binder/
Nhập khẩu động trong trình duyệt
Nhập khẩu động cho phép tập lệnh tải các tập lệnh khác khi cần:
import['hello.mjs'].then[module => {
module.hello['world'];
}];
Đọc thêm tại //developers.google.com/web/updates/2017/11/dynamic-import
Node.js yêu cầu
Kiểu mô -đun CJS cũ hơn, vẫn được sử dụng rộng rãi trong Node.js, là hệ thống ________ 29/________ 30.
// mymodule.js
module.exports = {
hello: function[] {
return "Hello";
}
}
// server.js
const myModule = require['./mymodule'];
let val = myModule.hello[]; // val is "Hello"
Có nhiều cách khác để JavaScript bao gồm nội dung JavaScript bên ngoài trong các trình duyệt không yêu cầu tiền xử lý.
Tải ajax
Bạn có thể tải một tập lệnh bổ sung với cuộc gọi AJAX và sau đó sử dụng
export function hello[] {
return "Hello";
}
1 để chạy nó. Đây là cách đơn giản nhất, nhưng nó được giới hạn trong miền của bạn vì mô hình bảo mật hộp cát JavaScript. Sử dụng export function hello[] {
return "Hello";
}
1 cũng mở ra cánh cửa cho các vấn đề về lỗi, hack và bảo mật.Tìm nạp tải
Giống như nhập Dynamic, bạn có thể tải một hoặc nhiều tập lệnh với cuộc gọi
export function hello[] {
return "Hello";
}
3 bằng cách sử dụng lời hứa để kiểm soát thứ tự thực thi cho các phụ thuộc tập lệnh bằng thư viện tiêm tìm nạp:export function hello[] {
return "Hello";
}
0tải jquery
Thư viện JQuery cung cấp chức năng tải trong một dòng:
export function hello[] {
return "Hello";
}
1Tải tập lệnh động
Bạn có thể thêm một thẻ tập lệnh với URL tập lệnh vào HTML. Để tránh chi phí của jQuery, đây là một giải pháp lý tưởng.
Kịch bản thậm chí có thể nằm trên một máy chủ khác. Hơn nữa, trình duyệt đánh giá mã. Thẻ
export function hello[] {
return "Hello";
}
4 có thể được đưa vào trang web export function hello[] {
return "Hello";
}
5 hoặc được chèn ngay trước khi đóng thẻ export function hello[] {
return "Hello";
}
6.Đây là một ví dụ về cách thức này có thể hoạt động:
export function hello[] {
return "Hello";
}
2Hàm này sẽ thêm thẻ
export function hello[] {
return "Hello";
}
4 mới vào phần cuối của phần đầu của trang, trong đó thuộc tính export function hello[] {
return "Hello";
}
8 được đặt thành URL được trao cho hàm là tham số đầu tiên.Cả hai giải pháp này đều được thảo luận và minh họa trong JavaScript Madness: tải tập lệnh động.
Phát hiện khi tập lệnh đã được thực thi
Bây giờ, có một vấn đề lớn mà bạn phải biết. Làm điều đó ngụ ý rằng bạn tải mã từ xa. Các trình duyệt web hiện đại sẽ tải tệp và tiếp tục thực hiện tập lệnh hiện tại của bạn vì chúng tải mọi thứ không đồng bộ để cải thiện hiệu suất. [Điều này áp dụng cho cả phương thức jQuery và phương thức tải tập lệnh động thủ công.]
Điều đó có nghĩa là nếu bạn sử dụng các thủ thuật này trực tiếp, bạn sẽ không thể sử dụng mã mới được tải của mình theo dòng tiếp theo sau khi bạn yêu cầu nó được tải, bởi vì nó sẽ vẫn đang tải.
Ví dụ:
export function hello[] {
return "Hello";
}
9 chứa import { hello } from './module.mjs';
let val = hello[]; // val is "Hello";
0:export function hello[] {
return "Hello";
}
3Sau đó, bạn tải lại trang nhấn F5. Và nó hoạt động! Gây nhầm lẫn...
Vậy giờ làm gì với nó ?
Chà, bạn có thể sử dụng bản hack mà tác giả đề xuất trong liên kết tôi đã cung cấp cho bạn. Tóm lại, đối với những người vội vàng, anh ta sử dụng một sự kiện để chạy chức năng gọi lại khi tập lệnh được tải. Vì vậy, bạn có thể đặt tất cả các mã bằng thư viện từ xa trong hàm gọi lại. Ví dụ:
export function hello[] {
return "Hello";
}
4Sau đó, bạn viết mã bạn muốn sử dụng sau khi tập lệnh được tải trong hàm Lambda:
export function hello[] {
return "Hello";
}
5Sau đó, bạn chạy tất cả những thứ đó:
export function hello[] {
return "Hello";
}
6Lưu ý rằng tập lệnh có thể thực thi sau khi DOM đã tải, hoặc trước đó, tùy thuộc vào trình duyệt và liệu bạn có bao gồm dòng
import { hello } from './module.mjs';
let val = hello[]; // val is "Hello";
1 hay không. Có một bài viết tuyệt vời về tải JavaScript nói chung thảo luận về điều này.Mã nguồn hợp nhất/tiền xử lý
Như đã đề cập ở đầu câu trả lời này, nhiều nhà phát triển sử dụng [các] công cụ Build/Transpilation như Bưu kiện, Webpack hoặc Babel trong các dự án của họ, cho phép họ sử dụng cú pháp JavaScript sắp tới, cung cấp khả năng tương thích ngược cho trình duyệt cũ hơn, kết hợp các tệp, Minify, Thực hiện phân tách mã, v.v.