【问题标题】:Production build cannot find environment info, but dev builds without errors生产构建找不到环境信息,但开发构建没有错误
【发布时间】:2019-02-18 06:48:33
【问题描述】:

我有一个 Angular 7 应用程序,当它在开发模式下构建时,它可以编译并且没有错误地提供服务。但是,当我使用生产设置构建应用程序时,它可以毫无问题地编译,但它找不到环境信息,只是在浏览器中出现错误。

vendor.d1094f98a9a59a44ad59.js:1 ERROR ReferenceError: env is not defined
    at new n (main.04dfe8e133fc5e316d84.js:1)
    at Vs (vendor.d1094f98a9a59a44ad59.js:1)
    at Ms (vendor.d1094f98a9a59a44ad59.js:1)
    at mu (vendor.d1094f98a9a59a44ad59.js:1)
    at hu (vendor.d1094f98a9a59a44ad59.js:1)
    at Object.Du [as createRootView] (vendor.d1094f98a9a59a44ad59.js:1)
    at e.create (vendor.d1094f98a9a59a44ad59.js:1)
    at e.create (vendor.d1094f98a9a59a44ad59.js:1)
    at t.bootstrap (vendor.d1094f98a9a59a44ad59.js:1)
    at vendor.d1094f98a9a59a44ad59.js:1
mi @ vendor.d1094f98a9a59a44ad59.js:1
vendor.d1094f98a9a59a44ad59.js:1 ERROR Error: Uncaught (in promise): ReferenceError: env is not defined
ReferenceError: env is not defined
    at new n (main.04dfe8e133fc5e316d84.js:1)
    at Vs (vendor.d1094f98a9a59a44ad59.js:1)
    at Ms (vendor.d1094f98a9a59a44ad59.js:1)
    at mu (vendor.d1094f98a9a59a44ad59.js:1)
    at hu (vendor.d1094f98a9a59a44ad59.js:1)
    at Object.Du [as createRootView] (vendor.d1094f98a9a59a44ad59.js:1)
    at e.create (vendor.d1094f98a9a59a44ad59.js:1)
    at e.create (vendor.d1094f98a9a59a44ad59.js:1)
    at t.bootstrap (vendor.d1094f98a9a59a44ad59.js:1)
    at vendor.d1094f98a9a59a44ad59.js:1
    at M (polyfills.65f19a590318fc6860f7.js:1)
    at polyfills.65f19a590318fc6860f7.js:1
    at t.invokeTask (polyfills.65f19a590318fc6860f7.js:1)
    at Object.onInvokeTask (vendor.d1094f98a9a59a44ad59.js:1)
    at t.invokeTask (polyfills.65f19a590318fc6860f7.js:1)
    at e.runTask (polyfills.65f19a590318fc6860f7.js:1)
    at g (polyfills.65f19a590318fc6860f7.js:1)

在开发模式下构建按预期工作。不知道为什么生产有任何不同。终端中没有错误。

预期产品构建与开发构建一致

【问题讨论】:

  • 您是否使用与 environment.ts 相同的数据填充了 environment.prod.ts?
  • 是的,文件是一样的,环境文件没有错误

标签: angular firebase webpack angular7


【解决方案1】:

您的environment.prod.ts 文件在environments/environment.prod.ts 中似乎有问题,请确保这与您的environment.ts 文件匹配。 当您使用 prod 构建时,environment.prod.ts 会替换 environment.ts。 看看这两个文件中的命名,看起来可能在你的environment.prod.ts 中你可能有

export const environment = {
    production: true,
    etc...
}

而不是

export const env = {
    production: true,
    etc...
}

看起来这就是提示中的错误。 http://tattoocoder.com/angular-cli-using-the-environment-option/ 是一个更好地了解 Angular 环境的好网址。

【讨论】:

  • 这是一个很好的建议,也是我开始调试的地方,但文件相同,并且编译后的应用在 main.js 文件中具有正确的产品信息
【解决方案2】:

这是冒犯性的陈述:

import { environment as env } from '@env/environment';

要更正错误,只需删除别名并将该行(和任何引用)更新为:

import { environment } from '@env/environment';

有人知道为什么使用as env 语法会导致这个问题吗?

【讨论】:

  • 不久前我也遇到了这个错误,有兴趣知道为什么这会导致产品构建中的运行时错误