加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular 2 Ahead-of-Time编译器:我必须让所有的类属性公开吗?

发布时间:2020-12-17 08:04:38 所属栏目:安全 来源:网络整理
导读:角度2 rc 6,typescript 2,节点4.5.0,npm 2.15.9在Windows 7上 我试图从即时到时间的编译,我依靠这些资源: Angular 2 – Ahead-of-time compilation how to https://github.com/angular/angular/tree/master/modules/@angular/compiler-cli#angular-temp
角度2 rc 6,typescript 2,节点4.5.0,npm 2.15.9在Windows 7上

我试图从即时到时间的编译,我依靠这些资源:

> Angular 2 – Ahead-of-time compilation how to
> https://github.com/angular/angular/tree/master/modules/@angular/compiler-cli#angular-template-compiler

我明白,我需要运行编译器ngc来生成ngfactory.ts文件,我需要更改main.ts以使用platformBrowser而不是platformBrowserDynamic来引导。我已经打了路障,不知道如何进行。

我已经确认应用程序运行时没有错误使用即时编译。我的主要是:

enableProdMode();
platformBrowserDynamic().bootstrapModule(AppModule);

2.我清除我的生产文件夹中的所有应用程序文件,但保留第三方库(例如:角度2,角度2材质)

3.我运行“node_modules / .bin / ngc”-p ./这运行没有输出到控制台。我看到每个.ts组件和模块都有一个.ngfactory.ts文件。我也看到一个.css.shim.ts文件,用于保存组件样式的每个.css文件。此外,.js和.js.map文件已经被放置在生产目录中

4.如果我现在尝试运行该应用程序,那么我发现所有保存组件模板的.html文件中找到404错误

5.我手动将所有模板文件(.html)移动到生产目录并运行应用程序。它运行正常,但它仍然使用即时编译(255个请求,包括compiler.umd.js)

我把我的主要改为:

enableProdMode();
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);

由于新的代码尚未被编译,所以没有什么区别。但是,我不知道该怎么做。

我应该再次运行ngc吗?如果是这样,我会收到很多类型的错误:

Error at C:/path/to/notify.component.ngfactory.ts:113:41: Property 'visible' is private and only accessible within class 'NotifyComponent'
... (many more like that with lots of properties from lots of components)
Compilation failed

使用AoT编译是否意味着我必须将我的所有类属性都公开?我错过了一步吗?

对于给定的组件,其模板访问的所有成员(方法,属性)必须在提前编译场景中公开。这是由于模板变成TS类的事实。一个生成的类和一个组件现在是两个不同的类,你不能访问私人成员跨类。

简而言之:如果您想使用预先编译,您将无法访问模板中的私有成员。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读