Sorun şu
- ES6 modüllerinin CommonJS'de nasıl taklit edildiği
- modülü nasıl içe aktarırsınız
ES6 - CommonJS
Bunu yazarken, ES6 modüllerini yerel olarak hiçbir ortam desteklemez. Bunları Node.js'de kullanırken, modülleri CommonJS'ye dönüştürmek için Babel gibi bir şey kullanmanız gerekir. Ama bu tam olarak nasıl oluyor?
Birçok insan module.exports = ...
buna eşdeğer export default ...
ve exports.foo ...
eşdeğer olduğunu düşünmektedir export const foo = ...
. Yine de bu tam olarak doğru değil, ya da en azından Babel'in bunu yapması değil.
ES6 default
dışa aktarmaları aslında dışa aktarma olarak da adlandırılır , bunun dışında default
"ayrılmış" bir ad ve bunun için özel bir sözdizimi desteği vardır. Babil'in adlandırılmış ve varsayılan dışa aktarmalarını nasıl derlediğine bir göz atalım:
// 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;
Burada, varsayılan dışa aktarmanın exports
, tıpkı gibi , nesne üzerinde bir özellik haline geldiğini görebiliriz foo
.
Modülü içe aktarın
Modülü iki şekilde içe aktarabiliriz: CommonJS veya ES6 import
sözdizimi kullanarak .
Sorununuz: Aşağıdaki gibi bir şey yaptığınıza inanıyorum:
var bar = require('./input');
new bar();
bunun bar
için varsayılan dışa aktarma değeri atanır. Ancak yukarıdaki örnekte de görebileceğimiz gibi, varsayılan dışa aktarma özelliği atandı default
!
Dolayısıyla, varsayılan dışa aktarmaya erişmek için aslında
var bar = require('./input').default;
ES6 modülü sözdizimini kullanırsak, yani
import bar from './input';
console.log(bar);
Babel onu
'use strict';
var _input = require('./input');
var _input2 = _interopRequireDefault(_input);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
console.log(_input2.default);
Her erişimin erişime bar
dönüştürüldüğünü görebilirsiniz .default
.