簡體   English   中英

帶有靜態外部js文件的Angular2 AOT編譯

[英]Angular2 AOT Compilation with static external js file

在回答有關服務器端渲染的問題時 ,我正在考慮在Angular2應用程序中實現AOT編譯。

我遇到的問題有一些背景知識:我們有一個在Visual Studio Online中運行的版本,該版本運行webpack等,並提供了一個正常運行的webapp。 然后,我們在VSO中發布了一個針對不同環境的版本,該版本將一些值(環境,基本url,重要鍵)放入env-config.js文件中。 env-config.js文件未在應用程序內捆綁和打包,但我們在Angular代碼中將其作為全局js變量進行訪問。

ENV-config.js

var envConfig = {
    'environment': 'local',
    'baseApiUrl': 'localhost:5555',
}

app-config.ts ,我們從窗口對象訪問envConfig ,將其存儲為常量,然后導出常量AppConfig ,然后使用OpaqueTokenapp.module注冊。

APP-config.ts

export function getEnvConfig(): IAppEnvConfig {
    if (window == null) {
        return {
            'environment': '',
            'baseApiUrl': ''
        };
    }
    else {
        return (window as any).envConfig;
    }
}

export const _envConfig: IAppEnvConfig = getEnvConfig();

export const AppConfig: IAppConfig = {
    applicationName: 'Web Application',
    environment: _envConfig.environment,
    baseApiUrl: _envConfig.baseApiUrl,
    otherSetting: 'someValue'
}

這在使用JIT編譯器的瀏覽器中運行非常好。 我正在結合使用教程和教程以及其他教程來啟用AOT編譯。

運行ngc給我以下錯誤:

"node_modules/.bin/ngc" -p app/tsconfig-aot.json Error encountered 
resolving symbol values statically. Calling function 'getEnvConfig',  
function calls are not supported. Consider replacing the function or lambda 
with a reference to an exported function, resolving symbol AppConfig

我在getEnvConfig()添加了window == null的檢查,因為我認為非瀏覽器編譯期間window不會可用。 如果getEnvConfig()除了返回一個空的IAppEnvConfig對象,除執行其他操作IAppEnvConfig我將收到ngc錯誤。

我已經做了很多Google搜尋工作,但是除了針對使用工廠函數創建類的新實例的通用答案之外,我沒有發現任何針對我的問題的特例,這是我在這里嘗試過的。

抱歉,如果這沒有太大意義-請隨時向我澄清/告訴我我做的事情非常愚蠢。

預先感謝Alex

我不確定該解決方案是否適合您,但我會以任何方式發布。 我遇到了同樣的問題,覺得這個問題很容易解決。 只需將您的函數放在一個類中。 像這樣:

export class AppConfig {
  _envConfig = AppConfig.getEnvConfig();
  AppConfig = {
    applicationName: 'Web Application',
    environment: this._envConfig.environment,
    baseApiUrl: this._envConfig.baseApiUrl,
    otherSetting: 'someValue'
  };

  static getEnvConfig() {
    if (window == null) {
      return {
        'environment': '',
        'baseApiUrl': ''
      };
    } else {
      return (window as any).envConfig;
    }
  }

  private constructor(){}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM