2016-04-05 13 views
1

Ich verwende rollup zum ersten Mal und es produziert einige unerwartete Ergebnisse. Unten habe ich die drei Dateien in meinem Beispiel zusammen mit der Ausgabe von rollup und die Art der Ausgabe, die ich suche.Rollup einschließlich nicht benötigte Abhängigkeiten und fehlende Funktion in der Ausgabe

Here's a repo with my complete example.

Ich habe drei Dateien 01.js, 02.js, 03.js.

01.js

import { fakePromise } from './02' 

export default fakePromise 

02.js

import { map } from 'lodash' 
import { stupidReference } from './03' 

export function fakePromise (str) { 
    return stupidReference(str) 
} 

export function fakeMap (arr) { 
    return map(arr, item => item + ' is stupid') 
} 

03.js

import Promise from 'bluebird' 

export function stupidReference (str) { 
    return Promise.resolve(str) 
} 

Dies ist, was rollup kommt zurück. (tatsächliche)

import { map } from 'lodash'; 
import Promise from 'bluebird'; 

function fakePromise (str) { 
    return stupidReference(str) 
} 

export default fakePromise; 

Dies ist, was würde ich erwarten, Rollup zurückzukehren. (erwartet)

import Promise from 'bluebird'; 

function stupidReference (str) { 
    return Promise.resolve(str) 
} 

function fakePromise (str) { 
    return stupidReference(str) 
} 

export default fakePromise; 

Ich hatte den Eindruck, dass Rollup die Abhängigkeiten würden alle schütteln, die Sie nicht in Ihrem Projekt haben müssen. Allerdings können Sie sehen, die tatsächlichen Ausgabe enthält auch eine nicht benötigte Abhängigkeit lodash, und es fehlt auch eine andere interne Funktion stupidReference.

Ich bin neugierig, warum das nicht funktioniert, wie ich erwartet hatte. Ich bin auch neugierig, ob ich das rollup Werkzeug richtig verwende. Wenn das nicht der beabsichtigte Verwendungszweck ist, würde ich wirklich gerne ein Werkzeug finden, das die von mir gesuchte Funktionalität erreicht. Ich möchte eine Funktion (oder eine Datei wie 01.js oben) bereitstellen und haben nur den Code, der zum Ausführen dieser Funktion erforderlich ist.

Update 1

Unsicher, was mit meinem Code passiert, aber der Editor auf der Rollup-Seite ist in einer anderen Datei der Lage ziehen und im Anschluss an den Baum. Here's a link to exactly what I have.

Update 2

Ich erkannte, dass ich babel falsch konfiguriert haben, installierte ich die beiden Module unten sowie .babelrc und rollup.config.js hinzugefügt.

npm i rollup-plugin-babel babel-preset-es2015-rollup --save 

rollup.config.js

import babel from 'rollup-plugin-babel'; 

export default { 
    entry: './01.js', 
    plugins: [ babel() ], 
    format: 'es6' 
}; 

.babelrc

{ 
    "presets": [ "es2015-rollup" ] 
} 

Mit diesem Update die gleiche Leistung noch produziert wird.

Antwort

4

Du triffst dich selbst :-) Das Repo hat einen Tippfehler - stupidReference wird an mehreren Stellen stuidReference geschrieben. Fix diese und es bündelt gut. (Wenn Rollup einen Bezeichner sieht, kennt es nicht den Ursprung von, sondern nimmt an, dass es ein globaler Fehler ist.)

Lodash wird eingeschlossen, obwohl seine abhängige Funktion nicht enthalten ist, weil Rollup nicht wissen kann, ob oder Lodash hat keine Nebenwirkungen. Eine Option wäre Lodash in dem Bündel enthalten (dh rollup-plugin-node-resolve verwenden), so dass Rollup kann den Code sehen, aber beachten Sie, dass tree-shaking Lodash is easier said than done, so die Empfehlung ist lodash-es zu verwenden und importieren einzelne Dateien:

import map from 'lodash-es/map.js'; 
+1

Hey Reich! Ich trete definitiv selbst. Was 'lodash' betrifft, bin ich etwas verwirrt. Da 'lodash' in meinem Build nicht benötigt wird (wird von keiner der Funktionen in' 01.js' verwendet), ist es ein nicht verwendeter Import. Wir müssten nicht schütteln (schließen Sie die 'map' -Funktion von lodash in die Quelle ein und wir würden es nicht als' npm' Abhängigkeit für das Bündel benötigen, das 'rollup' erzeugt. – ThomasReggi

+1

' map' ist ein unbenutzter Import (nur Eröffnet eine GH [Ausgabe] (https://github.com/rollup/rollup/issues/595) - idealerweise würde es diesen Spezifizierer fallen lassen, aber "lodash" selbst ist nicht, wegen seiner möglichen Nebenwirkungen. Es gibt einige Diskussion über eine Option, diese Nebeneffekte aggressiver zu verwerfen, aber es ist sehr schwierig –

+0

Was ich suche, ist etwas anders.Ich bin daran interessiert, ein Werkzeug zu erstellen, das spezifische Datei/Funktion in ein separates Knotenmodul aufbricht (Erstellen einer relevanten 'packages.json'-Datei. Ignorieren von ungenutzten Deps und möglichen Nebenwirkungen. Ich habe das Gefühl, dass Rollup nur ein Teil des Weges ist, ['acorn-umd'] (https://github.com/megawac/acorn-umd) wird helfen, und ['Standard'] (https://github.com/feross/standard) hat eine Möglichkeit zu wissen, welche Variablen nicht verwendet werden '' map ' ist definiert, aber niemals benutzt. Brauche mehr Forschung. – ThomasReggi