Can';t提供从Webpack config到Angular 2的环境变量
在我的网页配置中,我有以下内容Can';t提供从Webpack config到Angular 2的环境变量,angular,typescript,webpack,webpack-2,Angular,Typescript,Webpack,Webpack 2,在我的网页配置中,我有以下内容 var config = require("./webfig"); config.module = config.module || []; config.plugins.push(new webpack.DefinePlugin({ "Hazaa": "Shazoo" })); module.exports = config; 然而,在TS文件中,当我尝试使用下面的行访问它时,transpiler抱怨这样的东西不可用。我不完全确定如何对其进行故障排除,goog
var config = require("./webfig");
config.module = config.module || [];
config.plugins.push(new webpack.DefinePlugin({ "Hazaa": "Shazoo" }));
module.exports = config;
然而,在TS文件中,当我尝试使用下面的行访问它时,transpiler抱怨这样的东西不可用。我不完全确定如何对其进行故障排除,googlearching对于这个特定问题没有太大价值(就我正确认识到的诊断而言)
如何在TypeScript代码中访问Hazaa
编辑
根据这些评论,我引入了以下更改
config.plugins.push(new webpack.DefinePlugin({ "Hazaa": JSON.stringify("Shazoo") }));
名为app.d.ts的文件创建在与先前存在的index.d.ts相同的目录中。它只包含声明变量Hazaa:string代码>,我是从typings.json这样引用它的
{
"globalDependencies": {
"core-js": "registry:dt/core-js#0.9.7+20161130133742",
"app": "file:./typings/app.d.ts"
}
}
我还从tsconfig.json节文件中引用了它,如下所示
{
"compilerOptions": {
"baseUrl": "./source/application",
"target": "es5",
"experimentalDecorators": true,
"emitDecoratorMetadata": true
},
"files": [
"typings/index.d.ts",
"typings/app.d.ts"
],
"include": [ "source/**/*" ],
"exclude": [ "node_modules" ]
}
没有任何帮助-当我在组件的构造函数中转到console.log(Hazaa)
时,我得到一个编译时错误,说找不到名称。因为TypeScript不知道网页包全局变量(用DefinePlugin定义的变量)它在构建项目时被注入到代码中,因此它会给出一个错误。您必须告诉TypeScript,Hazaa
是一个字符串类型的变量,它将在构建时进行计算
因此,在.d.ts文件中声明Hazaa
declare var Hazaa: string;
该声明的适当位置在哪里?我的意思是,我如何声明它以便它自动进入我的x.d.ts文件?或者你是说我必须手动操作?我的打字有时会被重建,所以那将是一件痛苦的事……这个声明可能在你的app.d.ts
上。看看这个,还是不太清楚。我读了博客并做了一些修改(请查看问题中的编辑)。除此之外,你还需要使用JSON.stringify(“Shazoo”)
或“Shazoo”
你是说我必须对字符串进行stringify吗?这就像(bool)true
…假设您拥有console.log(Hazaa)
。它将被console.log(Shazoo)
取代。明白你为什么要用引号吗?是的。如果我必须手动编辑.d.ts文件,仍然感到困惑。这些会很有规律地再生…不太清楚你的意思。我说的是,你应该在你的网页中做。不确定这与定义文件有什么关系。