[英]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
,然后使用OpaqueToken
在app.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.