Babel 5.x에서는 다음 코드를 작성할 수 있습니다.
app.js
export default function (){}
index.js
require('babel/register');
require('./app')();
그러면 node index.js
오류없이 실행할 수 있습니다. 그러나 Babel 6.x를 사용하여 다음 코드를 실행하십시오.
index.es6.js
require('babel-core/register');
require('./app')();
오류가 발생합니다
require (…)는 함수가 아닙니다.
이유를 알고 싶어요?
답변
TL; DR
당신은 사용해야합니다
require('./app').default();
설명
Babel 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
-ing 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();
답변
위의 정답으로 후속 조치를 취하십시오.
기본 내보내기 동작을 사용하려면 babel-plugin-add-module-exports 플러그인을 사용 babel@5
해보세요 .
저에게 꽤 잘 작동합니다.
답변
이것이 작동하지 않는다면
require('./app').default()
사용하다
require('./app').default
마지막에 함수 호출없이.