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
Soconsole.log(环境)
insideenvironmentService.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 };