2017-02-04 3 views
1

Ich habe eine gute Zeit, mein Eckige 2 Projekt verbrachte immer mit SystemJS zu arbeiten, und jetzt mit AoT Zusammenstellung wie hier beschrieben: https://angular.io/docs/ts/latest/cookbook/aot-compiler.htmlBundle Angular2 AoT mit systemjs-Builder und Rollup Baum schütteln

Ich bin Ausführen von Plugin-Typescript mit SystemJS, um während der Entwicklung Typoskript im Browser zu übertragen. Ich habe Systemjs Builder mit Plugin-Typescript, um sfx Bündel aus der AoT (ngc) Ausgabe zu generieren.

Was ich nicht herausfinden kann ist, wie man systemjs-builder baumelt, um den eckigen AoT-Code zu schütteln. Von dem, was ich sagen kann, scheint es, dass Systemjs-Builder Rollup (z. B. https://github.com/systemjs/builder/issues/709) unterstützen sollte, aber ich glaube nicht, dass Rollup für mich ausgeführt wird, wenn ich rollup:true in meinen BuildStatic-Optionen festlegen.

Mein typescriptOptions von systemjs.config.js

transpiler: 'ts', 
typescriptOptions: { 
    target: 'es5', 
    module: 'es6', 
    emitDecoratorMetadata: true, 
    experimentalDecorators: true 
} 

mein buildStatic Aufruf:

builder.buildStatic('app/main-aot.ts', paths.wwwroot + 'dst/build-aot.sfx.min.js', { 
      minify: true, 
      rollup: true 
     }).then(function (output) { 
      console.log(output.inlineMap); 
     }, function (err) { 
      console.log(err); 
     }), 

ich das Stück über output.inlineMap von diesem Github Ticket bekam: https://github.com/systemjs/builder/issues/639

Aber es ist mir nicht klar, was ich erwarten sollte. Gerade jetzt gibt es einfach {}

Das ist alles wirklich neu für mich, ich könnte etwas völlig falsch verstehen. Suchen Sie nach jemandem, der mir helfen soll, festzustellen, ob Rollup läuft oder nicht, bestätigen Sie, dass es möglich sein sollte, und hoffen Sie, dass dies erledigt wird, wenn dies der Fall ist.

+0

Ich habe mich in die gleiche Frage läuft. Und fragte mich, ob Sie eine Antwort auf Ihre ursprüngliche Frage gefunden hatten. –

+0

@ N.Schipper Ich habe eine Lösung veröffentlicht, unter der ich nach einer Reihe von Versuchen und Fehlern landete. Leider habe ich nie eine tiefe Definition für den Inhalt von inlineMap gefunden, aber ich konnte meine eigene Frage gut genug beantworten, um weiterzugehen. –

Antwort

1

Ich war in der Lage, das zu erkennen, wenn Rollup richtig ausführt, die inlineMap Eigenschaft auf dem Builder Ergebnis ein Name Wert Sammlung von Arrays sein wird:

{ "key1": [], "key2": [] ... } 

Jeder Schlüssel den Namen einer Eingabedatei in buildStatic widerspiegelt. Ich benutze keine Glob-Pattern, ich starte buildStatic, indem ich die Single-Entry-Point (Haupt) -Datei für meine eckige App füttere, damit ich einen Schlüssel in der Map bekomme.

builder.buildStatic("main.ts", "out.sfx.min.js").then((output) => { 
    console.log(output.inlineMap); // => { "main.ts": [...] } 
}); 

Die Anzahl der Elemente in dem Array auf den Schlüssel Mapped I als die Anzahl von Optimierungen während des Rollup-Prozess gemacht interpretiert habe ... ich bin nicht sicher, ob dies technisch zu 100% korrekt ist, aber ich verwende es in meiner Build-Ausgabe als Vertrauen, dass der Rollup-Prozess tatsächlich etwas getan hat - wo größere Zahlen besser sind.

für die Nachwelt - Ich verwende die folgende schluck Funktion buildStatic und recht-Druckergebnisse ...

const builder = require("systemjs-builder"); 
const filesize = require("gulp-check-filesize"); 

let opts = { runtime: false, minify: true, mangle: true, rollup: true } 
let inFile = "main.ts"; 
let outFile = "main.sfx.min.js"; 
builder.buildStatic(infile, outFile, opts).then((output) => { 
    output = output || {}; 

    console.log(" "); 
    console.log(`Build Summary: ${inFile.toLowerCase()}`); 
    console.log("---------------------------"); 
    return new Promise((resolve, reject) => { 
     // prints output file name, size and gzip size. 
     gulp.src(outFile).pipe(filesize({ enableGzip: true })) 
      .on("error", reject) 
      .on("end",() => { 
       // build rollup sumary. 
       const map = result.inlineMap || {}; 
       if (Object.keys(map).length <= 0) console.log("No rollup optimizations performed."); 
       Object.keys(map).forEach((key) => { 
        console.log(`Rollup '${key}': ${(map[key] && map[key].length) || 0} optimizations.`); 
       }); 

      console.log("---------------------------"); 
      console.log(" "); 
      resolve(); 
     }); 
    }); 
}); 
+0

Ah danke, ich schaue mir das nächste Woche bei der Arbeit an! –

Verwandte Themen