无法从Webpack配置向Angular 2提供环境变量

时间:2017-03-28 09:59:38

标签: angular typescript webpack webpack-2

在我的Webpack配置中,我有以下内容。

var config = require("./webfig");
config.module = config.module || [];
config.plugins.push(new webpack.DefinePlugin({ "Hazaa": "Shazoo" }));
module.exports = config;

但是,在TS文件中,当我尝试使用下面的行访问它时,发件人抱怨这样的事情是不可用的。我并不完全确定如何对其进行故障排除,并且googlearching对此特定问题的影响不大(至于我已经正确识别了诊断)。

如何在TypeScript代码中访问 Hazaa

修改

根据评论,我引入了以下更改。

config.plugins.push(new webpack.DefinePlugin({ "Hazaa": JSON.stringify("Shazoo") }));

在与预先存在的 index.d.ts 相同的目录中创建名为 app.d.ts 的文件。它只包含declare var 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)时,我收到编译时错误,说明找不到该名称。

1 个答案:

答案 0 :(得分:3)

由于TypeScript不知道在构建项目时注入到代码中的webpack全局变量(使用DefinePlugin定义的变量),因此它会产生错误。你必须告诉TypeScript Hazaa是一个string类型的变量,它将在构建时进行评估。

因此请使用.d.ts文件声明Hazaa

declare var Hazaa: string;