Не удается правильно прочитать 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
Другие вопросы по тегам