Import vs require
Tags: javascript, node
Published: 2020-03-29 08:29:13

## Mục lục
0. Vấn đề
1. Require là gì ?
2. Import là gì?
3. Sự khác nhau giữa require và import
4. Kết bài


## 0. Vấn đề

***Heyzo what's up***

Xin chào tất cả mọi người, trước đây khi bắt đầu sử dụng **import** để thay thế **require** một package hay một module đã có để sử dụng. 
> Có một thắc mắc là tại sao lại sinh ra thằng **import** nhỉ trong khi **require** vẫn dùng tốt?

Sau khi tìm hiểu hôm nay mình sẽ trả lời thắc mắc đó theo suy nghĩ của mình, các bạn cùng đọc và cho ý kiến nhé 



## 1. Require là gì?

Là hàm được xây dựng trong **Nodejs theo chuẩn commonjs** giúp việc khai báo sử dụng các module đã có sẵn rất dễ dàng, xem ví dụ dưới nhé

Tạo ra một module trong file

**hello.js**
```
module.exports = function () {
  console.log('Hello everybody!')
}
```

Giờ, require **hello.js** vào để sử dụng 

**main.js**
```
var hello = require('./hello.js')

hello(); // Hello everybody
```

Rất dễ dàng phải không nào :v

## 2. Import là gì?

Là tính năng trong **ES6** giúp việc khai báo sử dụng các module đã có sẵn rất dễ dàng, à hình như cũng khá là giống **require** nhỉ :v. Vậy chúng khác nhau cái gì đây, *_- chả nhẻ chỉ đổi cách xưng hô, qua phần 3 sẽ rõ nhé. **Let's go**

## 3. Sự khác nhau giữa require và import

### Giống nhau 

Trước khi nói điểm khác thì mình xin nói điểm giống giữa hai thằng **require** và **import** này nhé

- Giúp việc khai báo sử dụng các module đã có sẵn rất dễ dàng, quản lí code theo module tốt hơn
- Khi biên dịch thì **import** cũng trở về **require** để code có thể thực thi

### Khác nhau 

Thực chất là những thứ hay ho mà thằng **import** này có mà thằng có nhé (Lí do được sinh ra)

- Theo mình cảm nhận thì khi dùng thằng import thì mọi người thấy code mình sáng hơn phải không nào đó là điều đầu tiền mà **import** mang lại nhé (Cảm quan thôi :v) => **Giúp code dễ nhìn đẹp đẽ hơn**

- **require** trong **Nodejs theo chuẩn commonjs**, còn **import** mới có trong **ES6** 

- Trong một *package, file* có nhiều module thì việc mong muốn chỉ khai báo các module muốn sử dụng để khỏi lãng phí tài nguyên là mong muốn chính đáng phải không nào ***(Good good good)***. **import** cho phép bạn lấy ra từng phần mà bạn thực sự dùng (Không cần lấy ra cả package hay file như anh require nhé) => **Giúp tiết kiệm bộ nhớ**

- Đối với **require** việc thực thi theo **synchronous** (Đồng bộ). Còn đối với **import** sẽ thực thi theo **asynchronous** (Bất đồng bộ), không quan tâm **Chi Dân** tới **import** thằng trên mình => **Hiệu suất cải thiện hơn**

```
var hello = require('./hello.js')
var hello1 = require('./hello1.js')
var hello2 = require('./hello2.js')

Lúc loading lên lần lượt là hello -> hello1 -> hello2
-----------------------------

import hello from './hello.js'
import hello1 from './hello1.js'
import hello2 from './hello2.js'

Lúc loading lên có thể là là hello2 -> hello -> hello1
```

## 4. Kết bài

Đến đây cũng đã hết bài viết rồi, cảm ơn mọi người đã theo dõi. Nếu có góp ý hay thắc mắc gì thì cứ để lại comment bên dưới mình sẽ trả lời. Xin chào mọi người. 

#### Link tham khảo:
- https://stackoverflow.com/questions/46677752/the-difference-between-requirex-and-import-x
- https://nodejs.org/en/knowledge/getting-started/what-is-require/