簡體   English   中英

來自 webpack 的打字稿中未定義全局變量

[英]global variables are undefined in typescript coming from webpack

typescript 2.4.0我嘗試使用DefinePlugin使用webpack創建全局/環境變量。 所以這是我試圖采取的方法:

webpack.js 定義部分

new webpack.DefinePlugin({
   environment: JSON.stringify('DEVELOPMENT'),
}),

globals.ts

declare const environment: String;
console.log(environment);
export { environment };
console.log(environment);

環境服務.ts

import { IEnvironment } from 'environment';
import { environment } from '../globals';
console.log(environment);

export default class EnvironmentService implements IEnvironment  {
  environmentName: String = environment;

  get isDevelopment(): boolean {
    return this.environmentName === 'DEVELOPMENT';
  }

  get isProduction(): boolean {
    return this.environmentName === 'PRODUCTION';
  }
}

在控制台日志中,我得到:

DEVELOPMENT
DEVELOPMENT
undefined

所以console.log(environment); 當我期待DEVELOPMENT時,內部environmentService.ts給了我undefined ,我不知道為什么?

它似乎只exports變量而不是值?

如果有人可以解釋我做錯了什么以及為什么它變得undefined我將不勝感激。

編輯 1

我想我看到了DefinePlugin在做什么。 它不是將environment設置為DEVELOPMENT而是替換行console.log(environment); console.log('DEVELOPMENT'); 當它exports environment時,它的未定義。

您可以創建一個@types文件夾並在其中放置一個聲明文件global.d.ts ,其內容就在下面。

declare const environment: String;

TypeScript 在編譯過程中默認包含所有@types包: https : @types

您需要像這樣為任何 webpack DefinePlugin 變量更新您的 globals.ts:

declare const environment: string;
const _environment = environment
export { _environment as environment };

更多在這里

DefinePlugin 內聯代碼部分,這就是為什么你需要所有那些JSON.stringify('DEVELOPMENT')而不僅僅是'DEVELOPMENT' 它按原樣用給定的代碼部分替換它知道的全局標識符。 如果您定義environment: '"PROD" + "DUCTION"'

然后

if(environment === 'PRODUCTION') {

}

成為

if("PROD" + "DUCTION" === 'PRODUCTION') {

}

這樣的東西應該在 ts2 中工作

const env: String = environment;
export { env as environment };

暫無
暫無

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

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