更新:问题由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
。
这可能是什么原因造成的?感谢
答案 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);