ProgramingTip

Babel 6.x에서 기본 내보내기 값을 필요로합니다.

bestdevel 2020. 10. 14. 08:09
반응형

Babel 6.x에서 기본 내보내기 값을 필요로합니다.


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')();

오류가 발생합니다.

(...)는 함수가 아닙니다.

이유를 알고 싶어요?


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하십시오 .

저에게 꽤 잘 작동합니다.

참고 URL : https://stackoverflow.com/questions/33704714/cant-require-default-export-value-in-babel-6-x

반응형