Не удается правильно прочитать config.json (TypeScript, Webpack)
ОБНОВЛЕНИЕ: проблема исправлена этим PR
Остерегайтесь того, что причина, по которой проблема возникает и обычные способы JavaScript не могут ее решить, может заключаться в том, что server.ts использует TypeScript и Webpack. Проверьте ответ Ганта. И отслеживать эту проблему на GitHub.
Я использую угловой / универсальный стартер в качестве стартера. У меня есть файл config.json
{
"api": "123"
}
Когда я читаю config
в server.ts:
import * as config from '../config.json';
// const config = require('../config.json'); will be same result
console.log(config);
Это показывает это в терминале:
{
"api": "123"
}
Тем не менее, когда я пытаюсь читать config.api
в server.ts:
import * as config from '../config.json';
// const config = require('../config.json'); will be same result
console.log(config.api);
Это показывает undefined
,
Это моя структура папок (другая часть такая же, как https://github.com/angular/universal-starter).
my-app
- config.json
+ src
- server.ts
И когда я запускаю приложение, я использую npm start
,
Что может вызвать это? Спасибо
3 ответа
Ваш файл конфигурации встроен в webpack, поэтому он следует спецификации модуля ES6 и возвращает JSON в виде строки, а не объекта, как вы ожидаете от Node.
Есть ли причина, по которой вы в первую очередь строите сервер с помощью веб-пакета?
Метод 1 неверен, так как не соответствует конфигурации вопроса. В рассматриваемой конфигурации веб-пакета используется файл 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);
ОБНОВЛЕНИЕ: проблема исправлена этим PR
Остерегайтесь того, что причина, по которой проблема возникает и обычные способы JavaScript не могут ее решить, может заключаться в том, что server.ts использует TypeScript и Webpack. Проверьте ответ Ганта. И отслеживать эту проблему на 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