의 차이점은 무엇입 노드's의 모듈이 있습니다.수출
고 ES6's내보내기 기본
? 나는'm 이유를 알아 내기 위해 노력하고있 나"__지 생성자를"오류가하려고 하면내보내기 기본
in Node.js 6.2.2.
'use strict'
class SlimShady {
constructor(options) {
this._options = options
}
sayName() {
return 'My name is Slim Shady.'
}
}
// This works
module.exports = SlimShady
'use strict'
class SlimShady {
constructor(options) {
this._options = options
}
sayName() {
return 'My name is Slim Shady.'
}
}
// This will cause the "SlimShady is not a constructor" error
// if in another file I try `let marshall = new SlimShady()`
export default SlimShady
문제
-어떻게 ES6 모듈은 에뮬레이션에서 CommonJS -를 가져오는 방법은 모듈
에 이 글을 쓰는 시점,환경을 지원합 ES6 모듈을 자체적으로 제공합니다. 들을 사용할 때에 Node.js 필요하신 다음과 같은 코드를 사용하면 바벨 변환하는 모듈을 CommonJS. 그러나 정확히 어떻게 이런 일이 일어날 수 있을까요?
많은 사람들이 고려 모듈이 있습니다.수출=...가 해당하는
내보내기 기본...와
수출하고 있습니다.foo...에 해당 될 수출 const foo=...
. 는's 지 않은 사실이지만,또는 적어도 어떻게 바벨는 않습니다.
ES6기본
수출 또한 실제로이름수출 것을 제외하고,기본
은"reserved"이름과가 있는 특별한 구문을 지원한다. 을 할 수 있습니 어떻게 보면 바벨 컴파일 이름과 기본 exports:
// 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가져오는
구문입니다.
의 문제:믿을 하는 다음과 같습니다.
var bar = require('./input');
new bar();
기대하는막
이 값이 할당됩의 기본 수출합니다. 하지만 우리가 볼 수있는 바와 같이 위의 예에서,기본 내보내기를 할당하여기본
습니다.
그래서 접근하기 위해서 기본 내보내기 실제로 우리가 해야 할지
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);
당신이 볼 수있는 모든 액세스를바
로 변환되었습니다.기본`.
tl;닥터 지금 작동하려면 이 파일을 요구하거나 가져오는SlimShady
컴파일해야합니다를 사용하여 바벨로'사용하여 엄격한'
.
나는'm 를 사용하여babel-cli
6.18.0 프로젝트에서 제가 처음에 발생하는 이 오류가 있습니다.
'사용하여 엄격한'
나쁜 뉴스 곰var SlimShady = require('./slim-shady');
var marshall = new SlimShady(); // uh, oh...
'use strict'
import SlimShady from './slim-shady'
var marshall = new SlimShady() // all good in the hood