Trong JavaScript, các từ khóa require và import được sử dụng để import modules. Require là một function trong Node.js, trong khi import là một keyword mới ECMAScript 6 (ES6).
Require là một synchronous operation và sẽ chặn việc thực thi tập lệnh cho đến khi module được tải và sẵn sàng để sử dụng. Mặt khác, import là một asynchronous operation, vì vậy tập lệnh sẽ không bị chặn trong khi module đang tải.
Một trong những khác biệt chính giữa require và import là require chỉ có thể được sử dụng để import module, trong khi import có thể được sử dụng để import cả module và các export trong module đó.
Ví dụ: nếu bạn có một module tên là myModule, bạn có thể sử dụng require để import toàn bộ module như sau:
const myModule = require('myModule');
Để import một function cụ thể từ module, bạn cần sử dụng tệp. Ký hiệu như thế này:
const myFunction = require('myModule').myFunction;
Sử dụng import, bạn có thể nhập toàn bộ module và tất cả các export của nó như sau:
import * as myModule from 'myModule';
Hoặc bạn có thể import một export function cụ thể như thế này:
import {myFunction} from 'myModule';
Nói chung, import được ưu tiên hơn require vì đây là cú pháp linh hoạt và hiện đại hơn và cuối cùng nó sẽ thay thế require trong ngôn ngữ. Tuy nhiên, require sẽ tiếp tục được hỗ trợ trong Node.js, vì vậy bạn có thể sử dụng một trong hai cú pháp tùy thuộc vào nhu cầu và sở thích của mình.
Import trong Javascript
Một trong những lợi ích chính của import là nó cho phép bạn chọn các liên kết mà bạn muốn nhập từ một module thay vì nhập toàn bộ module dưới dạng một đối tượng.
Điều này có thể giúp giảm số lượng code bạn cần viết và có thể làm cho code của bạn dễ đọc và dễ hiểu hơn.
Dưới đây là một ví dụ về cách bạn có thể sử dụng import để nhập các ràng buộc cụ thể từ một module khác:
// moduleA.js
export const x = 1;
export const y = 2;
// moduleB.js
import { x, y } from './moduleA';
console.log(x); // outputs 1
console.log(y); // outputs 2
Note: Webpack có một hệ thống bộ nhớ đệm tích hợp có thể được sử dụng để lưu trữ các module được nhập bằng từ khóa import.
Require trong Javascript
Trong môi trường Node.js – require là một hàm tích hợp để import các module ở file khác. Câu lệnh sẽ đọc một file JavaScript, thực thi nó và sau đó trả về đối tượng đã xuất.
// app.js
const _ = require('lodash');
const arr = [1, 2, 3];
const sum = _.sum(arr);
console.log(sum); // outputs 6
Một điều quan trọng cần lưu ý về require là nó đồng bộ, có nghĩa là nó chặn việc thực thi code cho đến khi module được tải.
Note: Require sử dụng hệ thống bộ nhớ đệm để đảm bảo rằng các module chỉ được tải một lần, ngay cả khi nhiều file yêu cầu chúng. Điều này có nghĩa là khi bạn sử dụng require để tải một module, trước tiên, Node.js sẽ kiểm tra xem module đó đã được tải và lưu vào bộ đệm chưa. Nếu có, nó sẽ trả về phiên bản đã lưu trong bộ nhớ đệm của module thay vì tải và phân tích cú pháp lại.