Sự khác biệt chính giữa requirevà import, là requiresẽ 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 importvà export, điều này làm cho importhành động tương tự như require.
Phiên bản tương lai của Node.js có thể importtự hỗ trợ (thực tế, phiên bản thử nghiệm đã có ) và đánh giá theo ghi chú của Node.js, importsẽ 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 importvới babel, nhưng tính năng này chưa được xác nhận, nó có thể hỗ trợ node_modulestrong 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 importcú pháp của ES6 thành cú pháp của CommonJS require.
Nói rằng tệp app_es6.jschứ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.jsontậ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 .babelrctậ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-filekịch bản được định nghĩa trong package.jsontập tin là một chỉ thị cho babel để phân tích các app_es6.jstập tin và sản lượng các tập tin app.js.
Sau khi chạy build-server-filetập lệnh, nếu bạn mở app.jsvà tìm date-fnsnhậ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-fnsvà sau đó mở, node_modules/date-fns/get_year/index.jsbạ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.jstệ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.
expresssẽ có kiểuany. Bạn có thể bao gồm các định nghĩa từ đây npmjs.com/package/@types/express