Great gugly muglys! มันยากกว่าที่คิด
ส่งออกค่าเริ่มต้นเดียว
นี่เป็นโอกาสที่ดีที่จะใช้การแพร่กระจาย ( ...
ใน{ ...Matters, ...Contacts }
ด้านล่าง:
// imports/collections/Matters.js
export default { // default export
hello: 'World',
something: 'important',
};
// imports/collections/Contacts.js
export default { // default export
hello: 'Moon',
email: 'hello@example.com',
};
// imports/collections/index.js
import Matters from './Matters'; // import default export as var 'Matters'
import Contacts from './Contacts';
export default { // default export
...Matters, // spread Matters, overwriting previous properties
...Contacts, // spread Contacts, overwriting previosu properties
};
// imports/test.js
import collections from './collections'; // import default export as 'collections'
console.log(collections);
จากนั้นในการรันโค้ดที่คอมไพล์ Babel จากบรรทัดคำสั่ง (จากรูทโครงการ /):
$ npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/node
(trimmed)
$ npx babel-node --presets @babel/preset-env imports/test.js
{ hello: 'Moon',
something: 'important',
email: 'hello@example.com' }
ส่งออกค่าเริ่มต้นคล้ายต้นไม้หนึ่งรายการ
หากคุณไม่ต้องการเขียนทับคุณสมบัติให้เปลี่ยน:
// imports/collections/index.js
import Matters from './Matters'; // import default as 'Matters'
import Contacts from './Contacts';
export default { // export default
Matters,
Contacts,
};
และผลลัพธ์จะเป็น:
$ npx babel-node --presets @babel/preset-env imports/test.js
{ Matters: { hello: 'World', something: 'important' },
Contacts: { hello: 'Moon', email: 'hello@example.com' } }
ส่งออกการส่งออกที่มีชื่อหลายรายการโดยไม่มีค่าเริ่มต้น
หากคุณทุ่มเทให้กับDRYไวยากรณ์ของการนำเข้าจะเปลี่ยนแปลงเช่นกัน:
// imports/collections/index.js
// export default as named export 'Matters'
export { default as Matters } from './Matters';
export { default as Contacts } from './Contacts';
สิ่งนี้สร้างการส่งออกที่มีชื่อ 2 รายการโดยไม่มีการส่งออกเริ่มต้น จากนั้นเปลี่ยน:
// imports/test.js
import { Matters, Contacts } from './collections';
console.log(Matters, Contacts);
และผลลัพธ์:
$ npx babel-node --presets @babel/preset-env imports/test.js
{ hello: 'World', something: 'important' } { hello: 'Moon', email: 'hello@example.com' }
นำเข้าการส่งออกที่มีชื่อทั้งหมด
// imports/collections/index.js
// export default as named export 'Matters'
export { default as Matters } from './Matters';
export { default as Contacts } from './Contacts';
// imports/test.js
// Import all named exports as 'collections'
import * as collections from './collections';
console.log(collections); // interesting output
console.log(collections.Matters, collections.Contacts);
สังเกตการทำลาย import { Matters, Contacts } from './collections';
ในตัวอย่างก่อนหน้า
$ npx babel-node --presets @babel/preset-env imports/test.js
{ Matters: [Getter], Contacts: [Getter] }
{ hello: 'World', something: 'important' } { hello: 'Moon', email: 'hello@example.com' }
ในทางปฏิบัติ
รับไฟล์ต้นฉบับเหล่านี้:
/myLib/thingA.js
/myLib/thingB.js
/myLib/thingC.js
การสร้าง a /myLib/index.js
เพื่อรวมไฟล์ทั้งหมดเป็นไปตามวัตถุประสงค์ของการนำเข้า / ส่งออก มันจะง่ายกว่าที่จะทำให้ทุกอย่างเป็นสากลในสถานที่แรกกว่าที่จะทำให้ทุกอย่างทั่วโลกผ่านการนำเข้า / ส่งออกผ่านทาง index.js "wrapper files"
หากคุณต้องการไฟล์เฉพาะimport thingA from './myLib/thingA';
ในโครงการของคุณเอง
การสร้าง "ไฟล์แรปเปอร์" ที่มีการเอ็กซ์ปอร์ตสำหรับโมดูลนั้นสมเหตุสมผลถ้าคุณทำแพ็กเกจสำหรับ npm หรือในโปรเจ็กต์แบบหลายทีมหลายปี
ทำให้ไกลขนาดนี้ไหม? ดูเอกสารสำหรับรายละเอียดเพิ่มเติม
ยิ่งไปกว่านั้น yay สำหรับ Stackoverflow ในที่สุดก็รองรับมาร์กอัปรั้วรหัสสามรายการ