Приложение Heroku вылетает с ошибкой ERR_UNKNOWN_FILE_EXTENSION - PullRequest
0 голосов
/ 28 апреля 2020

Мое приложение работало в течение нескольких месяцев без ЛЮБЫХ проблем.

Это очень просто и имеет только:

  1. core.m js - основной файл приложения
  2. config. json - файл настроек

core.m js импортирует настройки с этой строкой: import config from "./config.json";

Приложение запускается с командой: "node --experimental-modules core.mjs"

JSON допустимо.

Все файлы находятся на своих местах.

Я могу запустить это приложение локально, и оно будет работать.

Но после развернув это на героку вылетает на старте. Вот журнал:

2020-04-28T10:50:37.750749+00:00 app[worker.1]: (node:4) ExperimentalWarning: The ESM module loader is experimental.
2020-04-28T10:50:37.769400+00:00 app[worker.1]: internal/modules/run_main.js:57
2020-04-28T10:50:37.769402+00:00 app[worker.1]:     internalBinding('errors').triggerUncaughtException(
2020-04-28T10:50:37.769402+00:00 app[worker.1]:                               ^
2020-04-28T10:50:37.769402+00:00 app[worker.1]: 
2020-04-28T10:50:37.769403+00:00 app[worker.1]: TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".json" for /app/config.json
2020-04-28T10:50:37.769403+00:00 app[worker.1]:     at Loader.defaultGetFormat [as _getFormat] (internal/modules/esm/get_format.js:70:15)
2020-04-28T10:50:37.769404+00:00 app[worker.1]:     at Loader.getFormat (internal/modules/esm/loader.js:110:42)
2020-04-28T10:50:37.769404+00:00 app[worker.1]:     at Loader.getModuleJob (internal/modules/esm/loader.js:241:31)
2020-04-28T10:50:37.769405+00:00 app[worker.1]:     at async ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:44:17)
2020-04-28T10:50:37.769405+00:00 app[worker.1]:     at async Promise.all (index 1)
2020-04-28T10:50:37.769406+00:00 app[worker.1]:     at async link (internal/modules/esm/module_job.js:48:9) {
2020-04-28T10:50:37.769406+00:00 app[worker.1]:   code: 'ERR_UNKNOWN_FILE_EXTENSION'
2020-04-28T10:50:37.769406+00:00 app[worker.1]: }

ИСПРАВЛЕНИЕ БЕЗ JSON

Когда я пытался исправить, я только что прокомментировал строку импорта и скопировал и вставил объект json в core.m js like: const config = {...}; Это работает, но разрушает все концепции.

Есть идеи, что делать с этой проблемой json import? (без базы данных)

1 Ответ

0 голосов
/ 28 апреля 2020

Один простой обходной путь, который вы можете сделать, - это обернуть весь файл JSON в файл JS:

export default {
   ...json contents
}

и переименовать файл из config.json в config.js

тогда вы можете просто импортировать его, используя import config from './config.js';

Теперь, это не идеальное исправление, вы просто экспортируете POJO (который имеет тот же синтаксис, что и JSON), это единственная причина оно работает.

Тем не менее, вы можете столкнуться со сценарием ios, где вы не можете просто выполнить это преобразование, поскольку исходный файл JSON может быть файлом конфигурации, который нельзя преобразовать (например, package. json).

РЕДАКТИРОВАТЬ : Этот вопрос уже задавался. Более подробные ответы можно найти на Как импортировать файл json в ecmascript 6?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...