1

更新:这个 PR解决了这个问题


请注意问题出现的原因并且普通的纯 JavaScript 方法无法解决它可能是因为server.ts正在使用TypeScriptWebpack。检查甘特的答案。并在 github 上跟踪这个问题。

我使用angular/universal-starter作为启动器。我有一个文件config.json

{
  "api": "123"
}

当我阅读server.tsconfig时:

import * as config from '../config.json';
// const config = require('../config.json');  will be same result
console.log(config);

它在终端中显示:

{
  "api": "123"
}

但是,当我尝试读取server.tsconfig.api时:

import * as config from '../config.json';
// const config = require('../config.json');  will be same result
console.log(config.api);

它显示undefined.

这是我的文件夹结构(其他部分与angular/universal-starter相同)。

my-app
  - config.json
  + src
    - server.ts

当我启动应用程序时,我使用npm start.

什么可能导致这种情况?谢谢

4

3 回答 3

3

您的配置文件由 webpack 内联,因此它遵循 ES6 模块规范并将 JSON 作为字符串返回,而不是您期望的 Node.js 对象。

首先使用 webpack 构建服务器是有原因的吗?

于 2016-08-17T15:32:16.240 回答
1

更新:这个 PR解决了这个问题


请注意问题出现的原因并且普通的纯 JavaScript 方法无法解决它可能是因为server.ts正在使用TypeScriptWebpack。检查甘特的答案。并在 github 上跟踪这个问题。

我发现了问题:

import * as config from '../config.json';
// const config = require('../config.json'); also works


const json = JSON.parse(config);  // <- need this line
console.log(json.api);  // 123
于 2016-08-17T15:10:43.210 回答
1

方法一是错误的,因为它与问题配置不匹配。有问题的 webpack 配置对 json 文件使用 raw-loader,而这个答案是使用 json-loader。

使用方法2

两种方法都使用 nodejs + webpack 进行了测试。

方法一

var config = require(__dirname + '/config.json');
console.log(config['api']);

方法二

var config = JSON.parse(fs.readFileSync(__dirname + '/config.json', 'utf8'));
console.log(config.api);
于 2016-08-17T16:15:35.517 回答