2016-04-19 4 views
0

Manchmal möchten Sie diese Syntaxen kombinieren, meistens wenn import etwas, das die commonjs-Syntax verwendet. Einige Fälle wurden bereits zum Beispiel diskutiert hier:Wie spielt der ES6-Import/Export zusammen mit CommonJS-Exporten/erfordert

How to correctly use ES6 "export default" with CommonJS "require"?

aber es gibt sicherlich mehr Situationen, die auftreten können!

+1

Dies hängt von der Modul-Syntax transpiler und dem von Ihnen verwendeten Modul Loader oder Bundler ab. Sie sollten in der Lage sein, alles in ihren Dokumenten zu finden. – Bergi

Antwort

-1

Wie @Bergi und @Mike in den Kommentaren gezeigt haben, liegt es am Transpiler (am häufigsten Babel), wie er ES6-Import/-Export bewältigt. Ein paar Beispiele, was werden Sie mit Babel (mit Standard-Plugins) bekam:

Commonjs Export, Import ES6

module.exports = 1 // a.js 
import one from './a' // b.js 
// one === 1 

module.exports = {one: 1} // a.js 
import obj from './a'  // b.js 
// obj is {one: 1} 

import * as obj from './a' // b.js 
// obj.one === 1 ; however, check out the 'funky stuff' below 

import {one} from './a' // b.js 
// one === 1 

ES6 Export, Commonjs erfordern

export default 1 // a.js 
const one = require('./a').default 
// one === 1 

export const one = 1 
const one = require('./a').one 
// one === 1 

Funky Sachen

module.exports = 1   // a.js 
import * as obj from './a' // b.js 
// obj is {default: 1} 

module.exports = {one: 1} // a.js 
import * as obj from './a' // b.js 
// obj is {one: 1, default: {one: 1}} 
+2

Es gibt eine Spezifikation? – Bergi

+0

Wo ist diese Spezifikation? Ich bin mir zu 99% sicher, dass es völlig auf den Transpiler ankommt. –

+0

@MikeC: Sie haben Recht, es gibt keine Spezifikation für die Interoperabilität dieser beiden Syntaxen. Ich habe die Antwort entsprechend bearbeitet. –

Verwandte Themen