[英]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.