Perbedaan utama antara requiredan import, adalah bahwa itu requireakan secara otomatis memindai node_modulesuntuk menemukan modul, tetapi import, yang berasal dari ES6, tidak akan.
Kebanyakan orang menggunakan babel untuk mengkompilasi importdan export, yang membuat importbertindak sama dengan require.
Versi Node.js yang akan datang mungkin mendukung importdirinya sendiri (sebenarnya, versi eksperimental sudah melakukannya ), dan menilai berdasarkan catatan Node.js, importtidak akan mendukung node_modules, itu berdasarkan ES6, dan harus menentukan jalur modul.
Jadi saya sarankan Anda tidak menggunakan importdengan babel, tetapi fitur ini belum dikonfirmasi, mungkin mendukung node_modulesdi masa depan, siapa yang tahu?
Untuk referensi, di bawah ini adalah contoh bagaimana babel dapat mengubah importsintaks ES6 menjadi sintaks CommonJS require.
Katakanlah file app_es6.jsberisi impor ini:
import format from 'date-fns/format';
Ini adalah arahan untuk mengimpor fungsi format dari paket node date-fns .
File terkait package.jsondapat berisi sesuatu seperti ini:
"scripts": {
"start": "node app.js",
"build-server-file": "babel app_es6.js --out-file app.js",
"webpack": "webpack"
}
File terkait .babelrcbisa seperti ini:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
build-server-fileScript ini didefinisikan dalam package.jsonfile adalah arahan bagi babel untuk mengurai app_es6.jsfile dan output file app.js.
Setelah menjalankan build-server-fileskrip, jika Anda membuka app.jsdan mencari date-fnsimpor, 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-fnsdan kemudian buka node_modules/date-fns/get_year/index.jsAnda 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.jsfile 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.
expressakan bertipeany. Anda dapat memasukkan definisi dari sini npmjs.com/package/@types/express