Ausgang ein N-Modul mit webpack
Mit Rollup, die ich ausgeben kann, ein N-Modul durch einfaches einstellen der format
option 'es'
. Wie kann ich das gleiche tun mit webpack? Wenn es jetzt nicht möglich, tut webpack haben Sie irgendwelche Pläne, um es hinzuzufügen?
Das einzige, was ich gefunden habe in der Dokumentation für ausgegeben.libraryTarget
erwähnt, dass ES-Module, ist dies:
libraryTarget: "commonjs-module"
- Setzen Sie es mithilfe dermodule.exports
Objekt (output.library
wird ignoriert),__esModule
definiert ist (es Gewinde als ES2015 Modul im interop-Modus)
Es ist jedoch ziemlich unklar für mich. Ist es das gleiche wie libraryTarget: "commonjs2"
nur mit dem Unterschied, dass __esModule
definiert ist? Was ist ein "interop-Modus"?
- Zur info, die entsprechenden ticket auf webpack: github.com/webpack/webpack/issues/2933
Du musst angemeldet sein, um einen Kommentar abzugeben.
Webpack2 nicht relevanten libraryTarget es werden aber nicht ausgegeben ES6-bundles. Von der anderen Seite, Wenn Sie Bündel Ihrer Bibliothek in CommonJS bundlers nicht in der Lage zu laufen, den Baum Schütteln, nicht in der Lage, zu beseitigen, ungenutzte Module. Das ist wegen ES-Module sind noch in der Entwicklung, so dass niemand die Schiffe ES bündelt browser -, während webpack verwendet in Erster Linie zum erstellen von browser aktiviert bundles.
Von der anderen Seite, wenn Sie publishing-Bibliothek können Sie sowohl CommonJS (umd) und ES Ziele, Dank "Modul" - Schlüssel im Paket. json. Eigentlich brauchen Sie nicht webpack zu veröffentlichen ES Ziel, alle Sie tun müssen, ist laufen babel auf jede Datei, um es zu es2015 standart, zum Beispiel, wenn Sie reagieren und Sie ausführen kann "babel" mit nur "reagieren" - preset. Wenn Ihre Quelle ist ES schon 2015 ohne zusätzliche Funktionen können Sie module direkt auf Ihre src/index.js:
Ich fand es bequem zu bedienen babel zu handhaben
export v from 'mod'
Anleitung in meiner main index.js also ich habe 1 Modul-Datei exportieren alle meine Module. Das erreicht mit babel-plugin-transform-export-Erweiterungen (auch enthalten in der Stufe-1-preset).Ich finde diesen Ansatz von react-bootstrap-Bibliothek, die Sie sehen können Skripts in Ihre github (Sie sind webpack1). Ich habe Ihre Skripte verbessert sich ein wenig in meine reagieren-sigma-repo, fühlen Sie sich frei zu kopieren Sie folgende Dateien, die tun, was Sie brauchen:
Schauen Sie auch bei lib Ziel (scripts/lib/build.js und .babelrc), ich lib transpiled Module, so dass die Benutzer der library gehören nur die Module, die Sie benötigen, auch ohne ES explizit anzugeben require("reagieren-sigma/lib/Sigma/"), besonders nützlich, wenn deine lib ist schwer und modular!
src/index.js
direkt ist, dass es nicht funktioniert, wenn die original-Quelle importieren, Bilder, sass, etc., da dein Lader im webpack.config wird normalerweise ausschließennode_modules
für diese Dateitypen.Erstens möchte ich erklären den Unterschied zwischen den
commonJS
undcommonJS2
CommonJS
nicht unterstützenmodule.exports = function() {}
dienode.js
und viele anderecommonJS
Implementierungen.Webpack2
beschäftigt das Konzept der Bündelung der code für die Bibliothek und für die weit verbreitete Nutzung von it und machen es kompatibel mit der Arbeit in verschiedenen Umgebungen verwenden wir --libraryTarget optionNun das Teil hier beantworten die beiden Ihre Fragen
Den möglichen Optionen Bibliothek unterstützt
webpack2
sindlibraryTarget: "umd", //enum
libraryTarget: "umd-module", //ES2015 module wrapped in UMD
libraryTarget: "commonjs-module", //ES2015 module wrapped in CommonJS
libraryTarget: "commonjs2", //exported with module.exports
libraryTarget: "commonjs", //exported as properties to exports
libraryTarget: "amd", //defined with AMD defined method
libraryTarget: "this", //property set on this
libraryTarget: "var", //variable defined in root scope
Interlop hat folgende Bedeutung
Also im Grunde bedeutet es, dass die
commonJS-module
verwendet werden kann auszusetzen es alsmodule.exports
mithilfe derinterloping
mit ES2015 Modul verpackt in commonJSWeitere Infos über die
interloping
finden Sie in diesem Beitrag und stackoverflow link zu.Die grundlegende Idee ist in
ES6
runtime-export und-import Eigenschaften können nicht geändert werden aber incommonJS
dies funktioniert gut als erfordern änderungen passieren zur Laufzeit daher hat es ES2015 ist interloped mit der commonJS.Update
Webpack 2 gibt die Möglichkeit, die Erstellung der Bibliothek, die gebündelt werden können und enthalten.
Wenn Sie wollen, dass Ihr Modul in unterschiedlichen Umgebungen genutzt werden dann bündeln Sie es als eine Bibliothek durch hinzufügen der library-Optionen und die Ausgabe an Ihre spezifischen Umwelt. Verfahren erwähnt, die in der docs.
Ein weiteres einfaches Beispiel zur Verwendung commonjs-Modul
Wichtiger Punkt zu beachten ist hier
babel
fügtexports.__esModule = true
jedemes6 module
und auf importieren fordert die_interopRequire
zu überprüfen, die Eigenschaft.__esModule = true
müssen nur festgelegt werden, auf Bibliothek exportieren. Es muss festgelegt werden, auf dieexports
des Eintrag Modul. Inneren Module brauchen nicht__esModule
, es ist nur ein hack-babel.Wie gesagt in den docs
Nutzung wie bereits in der Testfälle
commonjs-module
Arbeit mit benannten Exporte?commonjs-module
undcommonjs2
sind offenbar entspricht an dieser Stelle, wobei erstere möglicherweise veraltet.