Perbedaan utama antara require
dan import
, adalah bahwa itu require
akan secara otomatis memindai node_modules
untuk menemukan modul, tetapi import
, yang berasal dari ES6, tidak akan.
Kebanyakan orang menggunakan babel untuk mengkompilasi import
dan export
, yang membuat import
bertindak sama dengan require
.
Versi Node.js yang akan datang mungkin mendukung import
dirinya sendiri (sebenarnya, versi eksperimental sudah melakukannya ), dan menilai berdasarkan catatan Node.js, import
tidak akan mendukung node_modules
, itu berdasarkan ES6, dan harus menentukan jalur modul.
Jadi saya sarankan Anda tidak menggunakan import
dengan babel, tetapi fitur ini belum dikonfirmasi, mungkin mendukung node_modules
di masa depan, siapa yang tahu?
Untuk referensi, di bawah ini adalah contoh bagaimana babel dapat mengubah import
sintaks ES6 menjadi sintaks CommonJS require
.
Katakanlah file app_es6.js
berisi impor ini:
import format from 'date-fns/format';
Ini adalah arahan untuk mengimpor fungsi format dari paket node date-fns .
File terkait package.json
dapat berisi sesuatu seperti ini:
"scripts": {
"start": "node app.js",
"build-server-file": "babel app_es6.js --out-file app.js",
"webpack": "webpack"
}
File terkait .babelrc
bisa seperti ini:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
build-server-file
Script ini didefinisikan dalam package.json
file adalah arahan bagi babel untuk mengurai app_es6.js
file dan output file app.js
.
Setelah menjalankan build-server-file
skrip, jika Anda membuka app.js
dan mencari date-fns
impor, Anda akan melihatnya telah diubah menjadi ini:
var _format = require("date-fns/format");
var _format2 = _interopRequireDefault(_format);
Sebagian besar file itu adalah gobbledygook bagi kebanyakan manusia, namun komputer memahaminya.
Juga untuk referensi, sebagai contoh bagaimana modul dapat dibuat dan diimpor ke proyek Anda, jika Anda menginstal date-fns
dan kemudian buka node_modules/date-fns/get_year/index.js
Anda dapat melihatnya berisi:
var parse = require('../parse/index.js')
function getYear (dirtyDate) {
var date = parse(dirtyDate)
var year = date.getFullYear()
return year
}
module.exports = getYear
Menggunakan proses babel di atas, app_es6.js
file Anda kemudian dapat berisi:
import getYear from 'date-fns/get_year';
// Which year is 2 July 2014?
var result = getYear(new Date(2014, 6, 2))
//=> 2014
Dan babel akan mengubah impor menjadi:
var _get_year = require("date-fns/get_year");
var _get_year2 = _interopRequireDefault(_get_year);
Dan menangani semua referensi ke fungsi yang sesuai.
express
akan bertipeany
. Anda dapat memasukkan definisi dari sini npmjs.com/package/@types/express