Babel 6.x에서 기본 내보내기 값을 require () 할 수 없습니다.


85

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 (...)는 함수가 아닙니다.

이유를 알고 싶어요?


당신은 .babelrc있습니까? 어딘가에 Babel 옵션을 지정하고 있습니까? Babel 6은 기본적으로 아무것도 변환하지 않으며 es2015게시 한 코드에 사전 설정을 지정하지 않기 때문에 묻습니다 .
Igor Raush

내가 정말이 @IgorRaush .babelrc, 다른 ES6 스크립트가 정상적으로 실행
XGHeaven

태그 설명을 읽으십시오. 이름이 언급 babelPython 라이브러리에 대한 질문입니다 .
Felix Kling

에서 함수를 내 보내지 말고 바로 app.js실행하십시오
Bergi

@FelixKling 것은 미안 해요 ... 파이썬에서 같은 이름을 모르는
XGHeaven

답변:


156

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

19
나를 require('./app').default;위해 일했습니다. default()반환undefined
thinklinux

14
@thinklinux require(...).default는 내 보낸 함수에 대한 참조를 제공합니다. default()그것을 부른다. 함수가 아무것도 반환하지 않거나 비어 있으면 물론 결과는 undefined.
Igor Raush 2016

10
require('path').default()작업은하지 않는 require('path').default나를 위해 작동
soulmachine

2
require('./app').default;함수 대신 개체를 내보내는 경우를 사용해야 합니다.
Tokenyet


2

이것이 작동하지 않는다면

require('./app').default()

사용하다

require('./app').default

마지막에 함수 호출없이.


Igor가 위의 주석 ( stackoverflow.com/questions/33704714/… ) 에서 말했듯 이 첫 번째 예제는 함수를 호출하고 두 번째 예제는 참조를 제공합니다
Stefano
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.