无法正确读取config.json(TypeScript,Webpack)

时间:2016-08-17 14:22:03

标签: node.js angular typescript webpack angular2-universal

更新:问题由this PR

修复
  

要知道问题出现的原因和普通的纯JavaScript方法无法解决,可能是因为 server.ts 正在使用 TypeScript 的WebPack 即可。检查Gant的答案。并在github上跟踪this issue

我使用angular/universal-starter作为首发。我有一个文件 config.json

{
  "api": "123"
}

当我在 server.ts 中阅读config时:

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

它在终端显示:

{
  "api": "123"
}

但是,当我尝试在 server.ts 中阅读config.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

这可能是什么原因造成的?感谢

3 个答案:

答案 0 :(得分:3)

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

您是否有理由首先使用webpack构建服务器?

答案 1 :(得分:1)

更新:问题由this PR

修复
  

要知道问题出现的原因和普通的纯JavaScript方法无法解决,可能是因为 server.ts 正在使用 TypeScript 的WebPack 即可。检查Gant的答案。并在github上跟踪this issue

我发现了问题:

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

答案 2 :(得分:1)

  

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

使用方法2

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

方法1

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

方法2

var config = JSON.parse(fs.readFileSync(__dirname + '/config.json', 'utf8'));
console.log(config.api);