Sự khác biệt chính giữa require
và import
, là require
sẽ tự động quét node_modules
để tìm các mô-đun, nhưng import
, xuất phát từ ES6, sẽ không.
Hầu hết mọi người sử dụng babel để biên dịch import
và export
, điều này làm cho import
hành động tương tự như require
.
Phiên bản tương lai của Node.js có thể import
tự hỗ trợ (thực tế, phiên bản thử nghiệm đã có ) và đánh giá theo ghi chú của Node.js, import
sẽ không hỗ trợ node_modules
, dựa trên ES6 và phải chỉ định đường dẫn của mô-đun.
Vì vậy, tôi sẽ đề nghị bạn không sử dụng import
với babel, nhưng tính năng này chưa được xác nhận, nó có thể hỗ trợ node_modules
trong tương lai, ai sẽ biết?
Để tham khảo, dưới đây là một ví dụ về cách babel có thể chuyển đổi import
cú pháp của ES6 thành cú pháp của CommonJS require
.
Nói rằng tệp app_es6.js
chứa nhập này:
import format from 'date-fns/format';
Đây là một lệnh để nhập hàm định dạng từ gói ngày-fns .
Các package.json
tập tin liên quan có thể chứa một cái gì đó như thế này:
"scripts": {
"start": "node app.js",
"build-server-file": "babel app_es6.js --out-file app.js",
"webpack": "webpack"
}
Các .babelrc
tập tin liên quan có thể là một cái gì đó như thế này:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
Đây build-server-file
kịch bản được định nghĩa trong package.json
tập tin là một chỉ thị cho babel để phân tích các app_es6.js
tập tin và sản lượng các tập tin app.js
.
Sau khi chạy build-server-file
tập lệnh, nếu bạn mở app.js
và tìm date-fns
nhập, bạn sẽ thấy tập lệnh đã được chuyển đổi thành:
var _format = require("date-fns/format");
var _format2 = _interopRequireDefault(_format);
Hầu hết các tập tin đó là gobbledygook cho hầu hết mọi người, tuy nhiên máy tính hiểu nó.
Cũng để tham khảo, như một ví dụ về cách mô-đun có thể được tạo và nhập vào dự án của bạn, nếu bạn cài đặt date-fns
và sau đó mở, node_modules/date-fns/get_year/index.js
bạn có thể thấy nó chứa:
var parse = require('../parse/index.js')
function getYear (dirtyDate) {
var date = parse(dirtyDate)
var year = date.getFullYear()
return year
}
module.exports = getYear
Sử dụng quy trình babel ở trên, app_es6.js
tệp của bạn có thể chứa:
import getYear from 'date-fns/get_year';
// Which year is 2 July 2014?
var result = getYear(new Date(2014, 6, 2))
//=> 2014
Và babel sẽ chuyển đổi nhập khẩu thành:
var _get_year = require("date-fns/get_year");
var _get_year2 = _interopRequireDefault(_get_year);
Và xử lý tất cả các tham chiếu đến chức năng cho phù hợp.
express
sẽ có kiểuany
. Bạn có thể bao gồm các định nghĩa từ đây npmjs.com/package/@types/express