TL; ดร
คุณต้องใช้
require('./app').default();
คำอธิบาย
บาเบล 5 เคยมีสับเข้ากันได้สำหรับexport default
: module.exports
ถ้าโมดูลการส่งออกมีเพียงหนึ่งและมันก็ส่งออกค่าเริ่มต้นจะได้รับมอบหมายให้ ตัวอย่างเช่นโมดูลapp.jsของคุณ
export default function () {}
จะถูกถ่ายทอดสู่สิ่งนี้
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = function () {};
module.exports = exports["default"];
นี้ทำอย่างหมดจดเข้ากันได้กับrequire
ไอเอ็นจีโมดูล Babel-transpiled (เช่นคุณกำลังทำ) มันก็ไม่สอดคล้องกัน; หากโมดูลมีทั้งการเอ็กซ์พอร์ตที่ตั้งชื่อและดีฟอลต์จะไม่สามารถrequire
-d
ในความเป็นจริงตามที่ ES6 โมดูลข้อมูลจำเพาะส่งออกเริ่มต้นคือไม่แตกต่างdefault
กว่าการส่งออกที่มีชื่อที่มีชื่อ มันเป็นเพียงแค่น้ำตาลที่เป็นประโยคซึ่งสามารถแก้ไขได้ในเวลาคอมไพล์ดังนั้นสิ่งนี้
import something from './app';
ก็เหมือนกับสิ่งนี้
import { default as something } from './app';
ตามที่กล่าวไว้ดูเหมือนว่า Babel 6 ตัดสินใจที่จะยกเลิกการแฮ็คการทำงานร่วมกันเมื่อทำการขนส่งโมดูล ตอนนี้โมดูลapp.jsของคุณจะปรากฏเป็นไฟล์
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function () {};
อย่างที่คุณเห็นไม่มีการมอบหมายให้module.exports
อีกแล้ว ในrequire
โมดูลนี้คุณต้องทำ
require('./app').default();
.babelrc
? คุณกำลังระบุตัวเลือก Babel อยู่ที่ไหนสักแห่งหรือไม่? ฉันถามเพราะ Babel 6 ไม่ได้แสดงอะไรเลยตามค่าเริ่มต้นและคุณไม่ได้ระบุes2015
ค่าที่ตั้งไว้ล่วงหน้าในรหัสที่คุณโพสต์ไว้