【问题标题】:Angular ng build --target=production giving errorsAngular ng build --target=production 给出错误
【发布时间】:2023-03-24 08:48:01
【问题描述】:

我使用 Angular-CLI 创建了一个新的 Angular 项目。

我使用的版本是:

Angular-Cli:1.0.2

角度:4.0.0。

我已经在其中添加了很多代码,但是现在,当我使用以下命令构建我的项目时,我得到了一堆错误

ng build --target=production --env=staging

错误:

/src/app/views/signup/signup.component.html (21,86):属性“电子邮件”受保护,只能在“SignUpComponent”类及​​其子类中访问。

/src/app/views/signup/signup.component.html (26,80):属性“密码”受保护,只能在“SignUpComponent”类及​​其子类中访问。

有人可以在这方面帮助我如何消除这些错误吗?当我省略 --target=production 时,构建成功,但在过去我遇到了一个问题,即没有指定目标浏览器缓存旧部署版本,用户必须删除浏览器缓存才能实现最新的更改/部署。

【问题讨论】:

    标签: angular build angular-cli production


    【解决方案1】:

    您的电子邮件和密码属性是否定义为私有?它们是否在组件的模板中使用?然后需要将它们从私有更改为公共。

    当您使用 Angular CLI 的生产模式时,您会自动获得以下信息:

    • --aot 设置为 true
    • --output-hashing 设置为所有(指纹资产)
    • --sourcemaps 设置为 false
    • --extract-css 设置为 true(为全局样式生成真正的 css 文件,而 dev 生成 .js 文件作为重建优化)
    • 如果在 CLI json 中配置,则添加 service worker
    • 将模块中的 process.env.NODE_ENV 替换为 production 值(这对于某些库是必需的,例如 react)
    • 在代码上运行 uglify

    更多信息请参见:https://github.com/angular/angular-cli/pull/6232

    最有可能产生这些错误的是 aot 编译器。 aot 编译器在 TypeScript 中编译模板,因此会产生更多类型错误。所以另一种选择是使用--prod 而不使用aot。

    【讨论】:

    • 是的,电子邮件和密码在组件中受到保护,但在以前版本的 angular-cli/angular 中有效。那么,我应该将它们公开还是使用 --aot=false?
    • 将它们公开...AOT 是生产性能所必需的
    • 我不确定哪个版本的 CLI 开始在生产模式下将 --aot 设置为 true。但我的猜测是这就是它以前起作用的原因。正如 P. Moloney 所提到的......使用 --aot=false 并不是一个好的选择,因为 aot(提前编译器)可以提高您的启动性能。
    【解决方案2】:

    您云尝试设置电子邮件和密码的公开可见性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 2018-12-09
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多