2016-04-28 9 views
3

Ich habe eine Node.js App mit allen Modulen in CommonJS geschrieben und einige mit es6 Features wie Generatoren, Let, Const usw. Und das alles funktioniert gut wie es ist.Bundle CommonJS-Dateien für Node.js

Ich möchte alle diese Dateien in einer Datei bündeln und dann händeln. Meine beste Schätzung für die notwendigen Schritte sind: 1) Konvertieren Sie alle Module in es6-Module - mit Babel 2) Verwenden Sie Rollup, um das Bündel zu erstellen und es als CJS-Datei auszugeben. 3) Uglify diese CJS-Datei.

Ich habe mit Rollup & babel gespielt und habe Artikel wie https://duske.me/easy-es2015-compilation-with-rollup-js-and-gulp-js/ gelesen, die gut funktionieren, wenn die Eingangsmodule bereits es6 Module sind. Und ich habe https://github.com/rollup/rollup-plugin-babel angeschaut, aber ich stolpere, da ich nicht viel Erfahrung mit babel, Rollup usw. habe

Antwort

1

Ich würde nicht versuchen, CommonJS-Module zu ES6 zu konvertieren. Es kann gemacht werden (esnext ist wahrscheinlich Ihre beste Wette - ich glaube nicht, dass Babel ein Plugin für den Übergang von CommonJS zu ES6 hat), aber Sie könnten auf einige Ecken und Kanten stoßen, wo die Semantik von CommonJS nicht ganz mit der Semantik von ES6 übereinstimmt Module.

Warum nicht einfach ES6-Module schreiben? Auf diese Weise ist Ihre App zukunftssicherer und die Bündelung wird sich vorhersehbarer verhalten.

Wenn dies keine Option ist und Ihre Quelldateien CommonJS sein müssen, ist es wahrscheinlich besser, einen CommonJS-Bundler wie Webpack oder Browserify zu verwenden.

+0

Dank Reiche . Ich habe derzeit 31 Dateien im CJS-Format, die ich nur ungern für das Refactoring in ES6-Module benötige (aber vielleicht muss). Für neuen Code schreibe ich ES6-Module und im Browser habe ich vor ein paar Monaten JSPM/System.js nach dem Wechsel von Require.js gestartet und liebe es. Ich sehe esnext, die für jetzt eine gute genug Workaround sein kann. Ich werde auch auf Webpack schauen. Hoffentlich bekommen wir eines Tages native es6 Modulunterstützung in node.js – nevf

0

Dies war möglich, mit babel 5, aber seit 6 babel benötigen Sie ein Plugin-Module normalen require('module') für Commonjs statt „neuen“ es das Plugin für das babel require('module').default

Hier zu verwenden: https://www.npmjs.com/package/babel-plugin-add-module-exports

+0

Danke, aber ich sehe nicht, wie mir das hilft, von cjs in es6 Module zu konvertieren. – nevf

+0

Sie müssen nichts umwandeln, damit es funktioniert – kromit