Javascript 来自Web包的typescript中未定义全局变量

Javascript 来自Web包的typescript中未定义全局变量,javascript,webpack,typescript2.0,Javascript,Webpack,Typescript2.0,在typescript2.4.0中,我试图使用DefinePlugin使用webpack创建全局/环境变量。因此,以下是我尝试采取的方法: webpack.js定义部件 new webpack.DefinePlugin({ environment: JSON.stringify('DEVELOPMENT'), }), 环球酒店 declare const environment: String; console.log(environment); export { environment

typescript2.4.0
中,我试图使用
DefinePlugin
使用
webpack
创建全局/环境变量。因此,以下是我尝试采取的方法:

webpack.js定义部件

new webpack.DefinePlugin({
   environment: JSON.stringify('DEVELOPMENT'),
}),
环球酒店

declare const environment: String;
console.log(environment);
export { environment };
console.log(environment);
环境服务

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
So
console.log(环境)
inside
environmentService.ts
在我期待
开发时给了我
未定义的
,我不知道为什么

它似乎只导出变量而不是值

如果有人能解释我做错了什么,以及为什么我的代码没有定义,我将不胜感激

编辑1


我想我看到了
DefinePlugin
在做什么。它没有将
environment
设置为
DEVELOPMENT
,而是替换了行
console.log(environment)带有
console.log('DEVELOPMENT')导出其未定义的
环境时。

定义插件内联代码部分,这就是为什么您需要所有这些
JSON.stringify('DEVELOPMENT')
而不仅仅是
'DEVELOPMENT'
。它用给定的代码部分替换已知的全局标识符。如果您定义
环境:““产品”+“产品””

然后

变成

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

}
类似的东西应该在ts2中工作

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

对于任何webpack DefinePlugin变量,您需要像这样更新globals.ts:

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

.

您可以创建一个
@types
文件夹,并在其中放置一个声明文件
global.d.ts
,其内容就在下面

声明常量环境:字符串;

TypeScript在编译过程中默认包括所有
@types
包:

在global.ts和DefinePlugin中,在哪里定义
environment
environmentName
?在哪里替换值?您正在将
DefinePlugin
导入为
IEnEnvironment
,但从未使用过它。。。除非我的想法是错误的。现在我得到了
找不到name'environment
@Michael哪一行?检查这个定义插件应该这样工作得到了它的工作。我拿出
declare-const-environment:String所以当我把它放回它工作。谢谢
declare const environment: string;
const _environment = environment
export { _environment as environment };