RequireJS thực hiện API AMD (nguồn) .
CommonJS là một cách xác định các mô-đun với sự trợ giúp của một exports
đối tượng, xác định nội dung mô-đun. Nói một cách đơn giản, một triển khai CommonJS có thể hoạt động như thế này:
// someModule.js
exports.doSomething = function() { return "foo"; };
//otherModule.js
var someModule = require('someModule'); // in the vein of node
exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
Về cơ bản, CommonJS chỉ định rằng bạn cần có một require()
hàm để tìm nạp các phụ thuộc, một exports
biến để xuất nội dung mô-đun và một định danh mô-đun (mô tả vị trí của mô-đun được đề cập liên quan đến mô-đun này) được sử dụng để yêu cầu các phụ thuộc ( nguồn ). CommonJS có nhiều triển khai khác nhau, bao gồm Node.js mà bạn đã đề cập.
CommonJS không được thiết kế đặc biệt dành cho trình duyệt, vì vậy nó không phù hợp lắm với môi trường trình duyệt ( tôi thực sự không có nguồn nào cho việc này - nó chỉ nói như vậy ở mọi nơi, kể cả trang web RequireJS. ) làm với tải không đồng bộ, vv
Mặt khác, RequireJS triển khai AMD, được thiết kế để phù hợp với môi trường trình duyệt ( nguồn ). Rõ ràng, AMD đã bắt đầu như một spinoff của định dạng CommonJS Transport và phát triển thành API định nghĩa mô-đun của riêng mình. Do đó sự tương đồng giữa hai. Tính năng mới trong AMD là define()
chức năng cho phép mô-đun khai báo các phụ thuộc của nó trước khi được tải. Ví dụ: định nghĩa có thể là:
define('module/id/string', ['module', 'dependency', 'array'],
function(module, factory function) {
return ModuleContents;
});
Vì vậy, CommonJS và AMD là các API định nghĩa mô-đun JavaScript có các triển khai khác nhau, nhưng cả hai đều có cùng nguồn gốc.
- AMD phù hợp hơn với trình duyệt, bởi vì nó hỗ trợ tải phụ thuộc mô-đun không đồng bộ.
- RequireJS là một triển khai của AMD , đồng thời cố gắng giữ tinh thần của CommonJS (chủ yếu trong các định danh mô-đun).
Để làm bạn bối rối hơn nữa, RequireJS, trong khi đang triển khai AMD, cung cấp trình bao bọc CommonJS để các mô-đun CommonJS gần như có thể được nhập trực tiếp để sử dụng với RequireJS.
define(function(require, exports, module) {
var someModule = require('someModule'); // in the vein of node
exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
});
Tôi hy vọng điều này sẽ giúp làm rõ mọi thứ!