2017-02-04 14 views
1

Я провел хорошее количество времени получения моего Угловой 2 проекта работать с SystemJS, и теперь с AOT компиляцией, как описано здесь: https://angular.io/docs/ts/latest/cookbook/aot-compiler.htmlBundle Angular2 AoT с systemjs-строитель и Накопительное дерево встряхивая

Я запуск плагина-машинописного текста с помощью SystemJS для перевода машинописного текста в браузере во время разработки. У меня есть системный строитель с использованием plugin-typescript для генерации пакета sfx из вывода AoT (ngc).

Я не могу понять, как получить systemjs-builder для дробления углового кода AoT. Из того, что я могу сказать, похоже, что systemjs-builder должен поддерживать rollup (например, https://github.com/systemjs/builder/issues/709), но я не думаю, что rollup работает для меня, когда я устанавливаю rollup:true в мои параметры buildStatic.

typescriptOptions Мои от systemjs.config.js

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

мой buildStatic вызов:

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); 
     }), 

я получил кусок о output.inlineMap из этого GitHub билета: https://github.com/systemjs/builder/issues/639

Но мне не ясно что я должен ожидать. Прямо сейчас он просто выдает {}

Это все очень ново для меня, возможно, я совершенно ничего не понимаю. Ищете кого-нибудь, кто поможет мне определить, работает ли rollup, подтвердите, что это должно быть возможно, и, надеюсь, выясните, если это так.

+0

Я был запущен в тот же самый вопрос сам. И было интересно, нашли ли вы ответ на свой первоначальный вопрос. –

+0

@ N.Schipper Я опубликовал решение, ниже которого я приземлился после кучи проб и ошибок. К сожалению, я никогда не сталкивался с глубоким определением содержимого inlineMap, но я смог удовлетворить свой собственный вопрос достаточно хорошо, чтобы двигаться дальше. –

ответ

1

я был в состоянии различить, что когда Накопительный правильно выполняет, то inlineMap свойство на результат строитель будет сбор значение имени массивов:

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

Каждый ключ отражает имя входного файла в buildStatic. Я не использую никаких шаблонов glob, я запускаю buildStatic, подавая ему единственный начальный (основной) файл для моего углового приложения, поэтому я получаю один ключ на карте.

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

Количество элементов в массиве, отображенных на ключ я интерпретирован как число заточек, сделанных в процессе набора исправлений ... Я не уверен, если это технически 100% точным, но я используйте его в своем выпуске сборки как уверенность в том, что процесс свертывания фактически что-то сделал - где больше чисел лучше.

Для потомков - я использую следующую функцию глотка к buildStatic и результаты довольно-печати ...

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

Ах, спасибо, я посмотрю на эту работу на следующей неделе! –