ความแตกต่างที่สำคัญระหว่างrequire
และimport
คือrequire
จะสแกนnode_modules
หาโมดูลโดยอัตโนมัติimport
มาจาก ES6 จะไม่
คนส่วนใหญ่ใช้บาเบลเพื่อรวบรวมimport
และexport
ทำให้การimport
กระทำเหมือนกันrequire
ทำหน้าที่เช่นเดียวกับ
เวอร์ชันในอนาคตของ Node.js อาจสนับสนุนimport
ตัวเอง (จริง ๆแล้วเวอร์ชันทดลองทำไปแล้ว ) และการตัดสินโดยบันทึกของ Node.js import
จะไม่สนับสนุนnode_modules
มันขึ้นอยู่กับ ES6 และต้องระบุเส้นทางของโมดูล
ดังนั้นฉันขอแนะนำให้คุณไม่ใช้import
กับ Babel แต่คุณสมบัตินี้ยังไม่ได้รับการยืนยันมันอาจรองรับnode_modules
ในอนาคตใครจะรู้
สำหรับการอ้างอิงด้านล่างเป็นตัวอย่างของวิธีที่ babel สามารถแปลงimport
ไวยากรณ์ของ ES6 เป็นCommonJS ได้require
ไวยากรณ์
สมมติว่าไฟล์app_es6.js
มีการนำเข้านี้:
import format from 'date-fns/format';
นี่คือคำสั่งที่จะนำเข้ารูปแบบฟังก์ชั่นจากแพคเกจโหนดวัน FNS
package.json
ไฟล์ที่เกี่ยวข้องอาจมีลักษณะดังนี้:
"scripts": {
"start": "node app.js",
"build-server-file": "babel app_es6.js --out-file app.js",
"webpack": "webpack"
}
.babelrc
ไฟล์ที่เกี่ยวข้องอาจเป็นดังนี้:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
นี้build-server-file
สคริปต์ที่กำหนดไว้ในpackage.json
ไฟล์สั่งสำหรับบาเบลที่จะแยกเป็นไฟล์และการส่งออกไฟล์ app_es6.js
app.js
หลังจากเรียกใช้build-server-file
สคริปต์ถ้าคุณเปิดapp.js
และค้นหาdate-fns
การนำเข้าคุณจะเห็นว่ามีการแปลงเป็น:
var _format = require("date-fns/format");
var _format2 = _interopRequireDefault(_format);
ไฟล์ส่วนใหญ่เป็น gobbledygook สำหรับมนุษย์ส่วนใหญ่ แต่คอมพิวเตอร์เข้าใจ
นอกจากนี้สำหรับการอ้างอิงเป็นตัวอย่างของวิธีการสร้างและนำเข้าโมดูลในโครงการของคุณถ้าคุณติดตั้งdate-fns
แล้วเปิดnode_modules/date-fns/get_year/index.js
คุณจะเห็นว่ามันมี:
var parse = require('../parse/index.js')
function getYear (dirtyDate) {
var date = parse(dirtyDate)
var year = date.getFullYear()
return year
}
module.exports = getYear
เมื่อใช้กระบวนการบาเบลด้านบนapp_es6.js
ไฟล์ของคุณอาจมี:
import getYear from 'date-fns/get_year';
// Which year is 2 July 2014?
var result = getYear(new Date(2014, 6, 2))
//=> 2014
และ Babel จะแปลงการนำเข้าเป็น:
var _get_year = require("date-fns/get_year");
var _get_year2 = _interopRequireDefault(_get_year);
และจัดการการอ้างอิงทั้งหมดไปยังฟังก์ชั่นตามลำดับ
express
any
คุณสามารถรวมคำจำกัดความได้จากที่นี่npmjs.com/package/@types/express