Khi viết ứng dụng Vue.js tuyệt React.js, các bạn thường hay được sử dụng cú pháp import để áp dụng một component hay 1 module như thế nào đó. Còn với những ứng dụng Node.js thuần JS sẽ thường dùng require:

1const fs = require('fs'); // CommonJS2// hay3import Component from 'React'; // ES6 moduleHoặc đôi khi chúng ta có thể bắt chạm chán trường phù hợp khai báo module bằng cách sử dụng cú pháp của AMD (Asynchronous Module Definition) như ở dưới đây:

1define( , function ($) 2 return function () ;3);Từ hầu hết ví dụ trên, đã bao giờ các bạn vướng mắc tại sao có lúc lại cần sử dụng được import, có lúc lại sử dụng require xuất xắc thậm chí vì sao khi ban đầu viết một áp dụng Node.js lại ko thể áp dụng cú pháp import một phương pháp bình thường?

1// file index.js2import * as fs from "fs";3fs.mkdir('/temp/temp', () => console.log("success"));Khởi chạy:

1$ node index.js 2(node:2912) Warning: khổng lồ load an ES module, mix "type": "module" in the package.json or use the .mjs extension. 3/Users/hoaitx/index.js:1 4import * as fs from "fs"; 5^^^^^^ 6 7SyntaxError: Cannot use import statement outside a module 8 at wrapSafe (internal/modules/cjs/loader.js:931:16) 9 at Module._compile (internal/modules/cjs/loader.js:979:27)10 at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10)11 at Module.load (internal/modules/cjs/loader.js:879:32)12 at Function.Module._load (internal/modules/cjs/loader.js:724:14)13 at Function.executeUserEntryPoint (internal/modules/run_main.js:60:12)14 at internal/main/run_main_module.js:17:47Thì một lỗi sẽ tiến hành trả ra như sinh sống trên! Vậy sự biệt lập giữa bọn chúng là gì và vì sao lại bao hàm sự khác biệt đó? nội dung bài viết dưới đây hy vọng sẽ giúp chúng ta giải đáp được những thắc mắc ở trên.

Bạn đang xem: Commonjs là gì

Bạn vẫn xem: Commonjs là gì

1. CommonJS cùng AMD

Cho các ai chưa chắc chắn thì require là cú pháp của CommonJS, bọn chúng được sử dụng để triển khai hệ thống modules đến Node.js từ phần đa ngày đầu. Kim chỉ nam của CommonJS là chỉ dẫn một hệ thống module cho các ứng dụng Node.js. Bởi vì ngay từ trên đầu Node.js thành lập và hoạt động thì Javascript vẫn chưa tồn tại một hệ thống module thỏa thuận nào cho ngôn từ này. Một đặc tính của CommonJS là chúng được thiết kế để “tải” những module một phương pháp đồng bộ và vấn đề đó thực sự không giỏi cho mô hình trình chuyên chú (browser), lúc mà các module được tải đồng bộ sẽ khiến hiệu năng download trang bị giảm sút đáng kể.

Trái lại với CommonJS thì AMD được thiết kế để cân xứng hơn với môi trường thiên nhiên trình duyệt. RequireJS là một trong triển khai vượt trội của AMD. Tính năng lạ trong AMD là define() cho phép khai báo các phụ thuộc vào của một module nó trước lúc được tải.

1define('module/id/string', , 2function(module, factory function) 3 return ModuleContents; 4);Việc cài đặt module vào AMD hoàn toàn có thể thực hiện tại một giải pháp bất đồng điệu sẽ để cho hiệu năng mua trang được nâng cấp hơn so với bài toán tải đồng bộ.


*

AMD thuở ban sơ là một quánh tả dự thảo đến định dạng module trong của CommonJS, tuy nhiên không đã có được sự đồng thuận của xã hội phát triển thế cho nên nó được đưa sang đội amdjs. Các tranh luận đa số xoay quanh việc tìm kiếm ra định hình nào là xuất sắc hơn, và sau cuối CommonJS được tạo thành cho sự phát triển ứng dụng phía sever vì tính chất đồng bộ của nó cùng AMD cân xứng hơn cho cải cách và phát triển phía máy khách (trình duyệt) với đặc thù không đồng bộ. Tham khảo

2. ES6 Module (ESM)

Và từ khi ES6 được giới thiệu, lúc này nó đã đem về hệ thống module chính thức cho Javascript. Vậy thì gần như thứ về module đã có được giải quyết? Cú pháp của ESM chủ yếu xoay quanh import và export những từ khoá:

1import * as fs from "fs"; // import2export * from "fs"; // exportECMAScript (ES) cũng chỉ là 1 đặc tả và việc áp dụng những sệt tả chính là do những nhà vạc triển ứng dụng (trình xem xét web, Node.js…), hay thậm chí có những ứng dụng cũ hơn đã bị ngưng update (trình để ý IE) và chúng trọn vẹn không có khả năng để xử lý phần lớn tính năng mới nhất của ES. Cũng chính vì thế, hiện giờ chúng ta đã có không ít công cụ cung ứng cho câu hỏi chạy mã JS ở các phiên phiên bản Node.js, trình chú ý cũ hơn. Điều đó giúp cho bọn họ không yêu cầu quá ân cần về việc thực hiện những cú pháp mới hơn của ES.

Một số mức sử dụng như Babel, Webpack có tích phù hợp công cụ cung ứng chúng ta thay đổi mã từ bỏ ES6 trở đi thành mã ES5 mà đa số trình chú tâm cũ có thể hiểu được.

Để bắt kịp xu thế, Node.js đã update việc hỗ trợ ESM từ bỏ phiên bạn dạng v12 LTS tuy nhiên cho đến hiện trên (v14 LTS) ESM vẫn đã là anh tài được thực nghiệm.Có một số phương pháp để “hợp thức hoá” việc thực hiện ESM trong các phiên bạn dạng Node.js từ bỏ 12 trở lên, bao gồm:- Đặt thương hiệu file có phần mở rộng .mjs- Thêm nằm trong tính “type” có mức giá trị là “module” trong file package.json- Hoặc thực hiện flag –input-type vào command.

Xem thêm: Lệ Phí Trước Bạ Là Gì? Ibaoviet Trước Bạ Nghĩa Là Gì

1// tệp tin index.mjs2import * as fs from "fs";3fs.mkdir('/temp/temp', () => console.log("success"));1$ node index.mjs2(node:3933) ExperimentalWarning: The ESM module loader is experimental.3success

3. Tổng kết

Ngày nay, cùng với sự phát triển của những công cụ hỗ trợ dịch mã từ ES cao hơn nữa xuống ES thấp hơn khiến cho việc viết mã Javascript như đang sử dụng cú pháp mới nhưng ẩn dưới nó là mã đã làm được dịch về phiên phiên bản ES cũ hơn để tương thích với phần lớn trình duyệt, Node.js phiên bạn dạng cũ hơn.