문제는
- CommonJS에서 ES6 모듈을 에뮬레이트하는 방법
- 모듈을 가져 오는 방법
ES6에서 CommonJS로
이 문서를 작성할 당시에는 기본적으로 ES6 모듈을 지원하는 환경이 없습니다. Node.js에서 사용할 때는 Babel과 같은 것을 사용하여 모듈을 CommonJS로 변환해야합니다. 그러나 정확히 어떻게 발생합니까?
많은 사람들이 생각 module.exports = ...하는 것과 수 export default ...와 exports.foo ...동등 할 export const foo = .... 그러나 그것은 사실이 아니거나 적어도 바벨이 그렇게하는 방식은 아닙니다.
ES6의 default수출은 실제로도있다 라는 것을 제외하고, 수출 default은 "예약 된"이름이고 그것을 위해 특수 구문 지원이있다. Babel이 이름이 지정된 내보내기와 기본 내보내기를 컴파일하는 방법을 살펴 보겠습니다.
// input
export const foo = 42;
export default 21;
// output
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = exports.foo = 42;
exports.default = 21;
여기에서 기본 내보내기가 exports객체 의 속성이되는 것처럼 볼 수 foo있습니다.
모듈 가져 오기
CommonJS를 사용하거나 ES6 import구문을 사용하여 두 가지 방법으로 모듈을 가져올 수 있습니다 .
당신의 문제 : 나는 당신이 다음과 같은 일을하고 있다고 생각합니다 :
var bar = require('./input');
new bar();
그 기대하는 것은 bar기본 수출의 값이 할당됩니다. 그러나 위의 예에서 볼 수 있듯이 기본 내보내기는 default속성에 할당됩니다 !
따라서 기본 내보내기에 액세스하려면 실제로해야합니다.
var bar = require('./input').default;
ES6 모듈 구문을 사용하면
import bar from './input';
console.log(bar);
바벨은 그것을
'use strict';
var _input = require('./input');
var _input2 = _interopRequireDefault(_input);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
console.log(_input2.default);
에 대한 모든 액세스가 access로 bar변환 되었음을 알 수 있습니다 .default.