module.exports = exports["default"]
ก่อนที่บาเบลจะเพิ่มบรรทัด มันไม่ทำเช่นนี้อีกต่อไป สิ่งนี้หมายความว่าอย่างไรก่อนที่ฉันจะทำ:
var foo = require('./foo');
// use foo
ตอนนี้ฉันต้องทำสิ่งนี้:
var foo = require('./foo').default;
// use foo
ไม่ใช่เรื่องใหญ่โต (และฉันเดาว่านี่คือสิ่งที่ควรจะเป็นมาตลอด) ปัญหาคือฉันมีรหัสจำนวนมากซึ่งขึ้นอยู่กับวิธีการใช้งาน (ฉันสามารถแปลงส่วนใหญ่เป็นการนำเข้า ES6 แต่ไม่ใช่ทั้งหมด) ทุกคนสามารถให้คำแนะนำเกี่ยวกับวิธีการทำงานแบบเก่าโดยไม่ต้องผ่านโครงการของฉันและแก้ไขปัญหานี้ (หรือแม้แต่คำแนะนำในการเขียน codemod เพื่อทำสิ่งนี้จะค่อนข้างลื่น)
ขอบคุณ!
ตัวอย่าง:
การป้อนข้อมูล:
const foo = {}
export default foo
ผลลัพธ์ด้วย Babel 5
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = {};
exports["default"] = foo;
module.exports = exports["default"];
เอาต์พุตด้วย Babel 6 (และปลั๊กอิน es2015):
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = {};
exports["default"] = foo;
module.exports = exports["default"]
ขอให้สังเกตว่าที่แตกต่างในการส่งออกเป็น
แก้ไข
คุณอาจสนใจในบล็อกนี้ฉันเขียนหลังจากแก้ปัญหาเฉพาะของฉัน: โมดูล ES6 ที่เข้าใจผิด, การอัพเกรด Babel, Tears และ Solution
if (false) { require('./foo') }
ด้วย webpack จะข้ามจริง ๆ รวมถึงfoo.js
ในกลุ่มผลลัพธ์
false
สลับของคุณที่นั่น? หากเป็นเงื่อนไขที่มีอยู่ในการกำหนดค่า webpack ของคุณอาจมีตัวเลือกอื่น
export default {foo, bar}
module.exports = {foo, bar}
ฉันค่อนข้างชอบวิธีที่ไม่ถูกต้องซึ่งตอนนี้ไม่ได้รับการสนับสนุน
require
คุณจำเป็นต้องใช้ถ้าคุณทำงานใน codebase ที่ใช้ Babel? โอกาสที่จะมีวิธีการอื่น ๆ ที่จะช่วยให้คุณสามารถหลีกเลี่ยงได้