Im normalen ES5, wenn ich ein Paket an Autor möchte die Verwendung auf beiden Server-Seite sein könnte (über CJS, AMD, RequireJS) oder Browser, würde ich so etwas tun:Wie erstellen Sie ein Modul, das in ES6 mit Babel kompatibel mit CommonJS, AMD und Browser ist?
(function(name, definition)){
if (typeof exports !== 'undefined' && typeof module !== 'undefined') {
module.exports = definition();
} else if (typeof define === 'function' && typeof define.amd === 'object') {
define(definition);
} else {
this[name] = definition();
}
}('foo', function foo(){
'use strict';
return 'foo';
})
Wie würde ich erreichen diese Funktionalität beim Schreiben eines Pakets in ES6?
Was ich versucht:
if (typeof exports !== 'undefined' && typeof module !== 'undefined') export Foo;
else if (typeof define === 'function' && typeof define.amd === 'object') define(Foo);
else this['Foo'] = Foo;
Während dieser transpiling, Babel wirft mir einen Fehler:
SyntaxError: src/index.js: 'import' and 'export' may only appear at the top level (10:69)
9 |
> 10 | if (typeof exports !== 'undefined' && typeof module !== 'undefined') export Foo;
| ^
11 | else if (typeof define === 'function' && typeof define.amd === 'object') define(Foo);
12 | else this['Foo'] = Foo;
13 |
es funktionierte, als ich module.exports
statt export
verwendet, aber ist es möglich, dies streng zu tun mit ES6?
Dies wird auch UMD, * Universal Module Definition * genannt. Könnte Ihrer Suche ein wenig helfen :-) – Bergi
Sie sollten diesen Code nicht selbst schreiben müssen. Sie sollten einfach die ES6-'Export'-Deklaration in Ihre Quelle einfügen. Die UMD sollte vom Transpiler daraus generiert werden. – Bergi
https://babeljs.io/docs/usage/modules/ ... alles ist in der Dokumentation. –