2017-06-20 15 views
0

typescript 2.4.0DefinePluginを使用してグローバル変数/環境変数を作成しようとしています。webpackを使用しています。だからここに私が取るしようとしているアプローチです:グローバル変数はwebpackからのtypescriptで定義されていません

webpack.jsはコンソールで、一部

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

globals.ts

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

environmentService.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 

だからenvironmentService.tsundefinedになると私はと私には分かりません。

exports変数だけで値は表示されません。

誰かが私が間違ってやっていることを説明することができ、なぜそれが得られるのかundefined私はそれを感謝します。

編集1

私はDefinePluginが何をしているか見ると思います。 environmentDEVELOPMENTに設定せず、代わりにconsole.log(environment);console.log('DEVELOPMENT');に置き換え、exportsenvironmentを未定義に設定します。

+0

を動作するはずどこ 'environment'または' environmentName'が定義されますでしょうか? – evolutionxbox

+0

global.tsにDefinePluginが値を置き換えています。 –

+0

値はどこに置き換えられますか?あなたは 'DefinePlugin'を' IEnvironment'としてインポートしていますが、私の考えが間違っていない限り、それを使うことはありません。 – evolutionxbox

答えて

1

DefinePluginはコード部分をインライン化するため、JSON.stringify('DEVELOPMENT')だけでなく、すべて'DEVELOPMENT'を必要としています。それは与えられたコード部分をそのまま知っているグローバル識別子を置き換えます。あなたはenvironment: '"PROD" + "DUCTION"'

を定義する場合は、

if(environment === 'PRODUCTION') { 

} 

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

} 

になり、このような何かはTS2

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

私は '名前 '環境'を見つけることができません。 –

+0

@Michaelどのライン? –

+0

これをチェックしてくださいhttps://www.webpackbin.com/bins/-Kn5-oiscFEQ8_wQsUhL DefinePluginはこのように動作します –

関連する問題