首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Angular2 AoT与systemjs-builder和汇总树抖动捆绑在一起

将Angular2 AoT与systemjs-builder和汇总树抖动捆绑在一起
EN

Stack Overflow用户
提问于 2017-02-04 12:01:11
回答 1查看 1.1K关注 0票数 1

我花了很多时间让我的Angular 2项目使用SystemJS,现在使用AoT编译,如下所述:https://angular.io/docs/ts/latest/cookbook/aot-compiler.html

在开发期间,我使用SystemJS在浏览器中运行plugin-typescript来转换typescript。我已经让systemjs builder使用plugin-typescript从AoT (ngc)输出生成sfx包。

我不明白的是如何让systemjs-builder对angular AoT代码进行树抖动。据我所知,似乎systemjs-builder应该支持rollup (例如https://github.com/systemjs/builder/issues/709),但我认为当我在buildStatic选项中设置rollup:true时,rollup不会为我运行。

来自systemjs.config.js的我的typescriptOptions

代码语言:javascript
复制
transpiler: 'ts',
typescriptOptions: {
  target: 'es5',
  module: 'es6',
  emitDecoratorMetadata: true,
  experimentalDecorators: true
}

我的buildStatic调用:

代码语言:javascript
复制
 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);
        }),

我从github的门票上得到了一篇关于output.inlineMap的文章:https://github.com/systemjs/builder/issues/639

但我不清楚我应该期待什么。现在,它只是输出{}

这对我来说真的很新鲜,我可能完全误解了什么。寻找任何人来帮助我确定rollup是否正在运行,确认这应该是可能的,如果是的话,希望能解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-24 23:27:21

我能够辨别出,当rollup正确执行时,构建器结果上的inlineMap属性将是数组的名称值集合:

代码语言:javascript
复制
{ "key1": [], "key2": [] ... }

每个键将一个输入文件的名称反映到buildStatic中。我不使用任何glob模式,我通过为我的angular应用程序提供单个入口点(主)文件来运行buildStatic,因此我在地图中获得一个键。

代码语言:javascript
复制
builder.buildStatic("main.ts", "out.sfx.min.js").then((output) => {
   console.log(output.inlineMap); // => { "main.ts": [...] }
});

数组中映射到键的项的数量,我将其解释为在汇总过程中进行的优化的数量...我不确定这在技术上是否是100%准确的,但我在我的构建输出中使用它作为对汇总过程确实做了一些事情的信心-数字越大越好。

对于后代-我使用以下gulp函数来buildStatic并漂亮地打印结果...

代码语言:javascript
复制
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();
        });
    });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42036331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档