应用程序汇总和树木摇晃

时间:2016-11-04 09:17:29

标签: javascript angular ecmascript-6 rollupjs

我们在这里得到的是一个非常大的Angular 2应用程序,它主要是在角度还很年轻的时候开发的,没有工作compiler-cli和类似的东西。当我做到这一点时,我始终有一个想法,在某些时候我们会有一个树摇晃和AoT编译,我试图让它在某个间隔工作,但仍然没有管理。

问题在于,每当我尝试应用任何rollup例程,这些例程都可以在www上找到,我每次都偶然发现...

我认为使这个版本与Web上可以看到的其他版本不同的是项目布局 - 我们在这里有一堆自编的外部Angular 2 npm模块,它们将一些通用功能封装到最终项目中那些应该包含在最终的捆绑中。

所以布局是:

1)有多个npm模块包含TypeScript个源文件,并附有JavaScript个版本,转换为es2015格式;

2)有一个应用程序有自己的模块,它们非常依赖从外部npm模块导入的模块;

3)我并没有要求太多 - 我只想:a)将所有内容打包在树形摇束中并完成; b)为具有相同布局的生产构建实现AoT编译;

问题

每当我尝试使用最简单的rollup模块示例时,我最终会遇到类似:'createPlatformFactory' is not exported by node_modules\@angular\core\bundles\core.umd.js (imported by node_modules\@angular\platform-browser-dynamic\src\platform-browser-dynamic.js). For help fixing this error see https://github.com/rollup/rollup/wiki/Troubleshooting#name-is-not-exported-by-module的问题,当我尝试将项目转换为JavaScript然后将其与{捆绑在一起}时会发生这种情况{1}}或甚至当我尝试通过rollup启动它时。

我对此假设的假设是,即使RC6中的Angular源格式为rollup-plugin-typescript格式es2015不是 - 它采用core.umd.js格式,具有不同的导入/导出等。< / p>

那么,任何人都可以确认这是一个问题吗?另外,我们如何解决这个问题? (我真的尝试过所有我能想象到的解决问题的策略,但没有一个能够奏效。)

希望有人可以帮忙解决这个问题。

1 个答案:

答案 0 :(得分:0)

如上所述,问题实际上是rollup定位umd输出包而不是es6源文件,并且可以通过将角度模块请求路径重定向到我已经找到的方法来解决源文件,如下所示:

if (id.startsWith('@angular/')) { return `${__dirname}/node_modules/${id}/index.js`; } 而且,完成后rollup程序继续进行而没有错误。这肯定听起来像是成功,但它不是......

结果我没有看到任何关于丢弃方法的通知,正如我所料,并且我没有看到输出包大小的任何显着减少。

此外,由于尝试通过运行以下内容将输出包转换为es5格式:

tsc --target es5 --allowJs ./dist/bundle.es2015.js --out ./dist/bundle.js

我从RangeError: Maximum call stack size exceeded

收到node_modules\typescript\lib\tsc.js:37826错误

所以它再次相同 - 一个问题解决了导致另一个问题,但仍然没有结果。

如何处理这个问题的任何想法将不胜感激!

顺便说一下 - 任何人都知道@angular tree如何在互联网上找到的任何例子中起作用,考虑到所有这些都明显针对UMD捆绑而不是ES6源文件?