1

我们在这里得到的是一个相当大的Angular 2应用程序,它主要是在 Angular 还很年轻时开发的,并且没有compiler-cli类似的工作。完成后,我总是想到,在某个时候,我们将进行 tree-shaking 和 AoT 编译,我试图让它在一段时间内工作,但仍然没有成功。

问题是,每当我尝试应用任何rollup可以在 www 上大量找到的例程时,我都会偶然发现一些东西……每次都是这样。

我认为这个构建与在 Web 上可以看到的其他构建不同的是项目布局——我们这里有一堆自己编写的外部Angular 2npm 模块,它们将一些通用功能封装到最终项目中,这些应该包含在最终包中.

所以布局是:

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

2)有一个应用程序有自己的模块,这些模块严重依赖从外部模块导入的npm模块;

3)我要求不高——我只想: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然后将其捆绑rollup甚至尝试通过rollup-plugin-typescript.

我对此的假设是,即使自 RC6 以来的 Angular 源es2015格式core.umd.js不是 - 它的UMD格式具有不同的导入/导出等。

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

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

4

1 回答 1

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

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

任何有关如何处理此问题的想法将不胜感激!

顺便说一句 - 考虑到所有这些显然都是针对 UMD 捆绑包而不是 ES6 源文件,任何人都知道@angular 摇树在任何可以在互联网上找到的示例中如何工作?

于 2016-11-07T08:33:03.763 回答