node.js - Heroku 应用程序因 ERR_UNKNOWN_FILE_EXTENSION 而崩溃
问题描述
我的应用程序运行了几个月没有任何问题。
这很容易,只有:
- core.mjs - 主应用程序文件
- config.json - 设置文件
core.mjs 使用这一行导入设置:import config from "./config.json";
该应用程序使用以下命令启动:"node --experimental-modules core.mjs"
JSON 是有效的。
所有文件都在他们的位置。
我可以在本地运行这个应用程序,它会工作。
但是在heroku上部署它之后,它在启动时崩溃了。这是日志:
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.mjs 中,例如:const config = {...};
这有效,但破坏了所有概念。
关于如何处理这个 json 导入问题的任何想法?(无数据库)
解决方案
您可以做的一种简单解决方法是将整个 JSON 文件包装在 JS 文件中:
export default {
...json contents
}
并将您的文件重命名config.json
为config.js
然后你可以简单地使用导入它import config from './config.js';
现在,这不是一个完美的解决方案,您只是导出一个 POJO(与 JSON 具有相同的语法),这是它工作的唯一原因。
也就是说,您可能会遇到无法简单地进行此转换的情况,因为原始 JSON 文件可能是无法转换的配置文件(例如 package.json)。
编辑:这个问题已经被问过了。更详细的答案可以在如何在 ecmascript 6 中导入 json 文件?
推荐阅读
- python - matplotlib scatter 耗时太长
- amazon-web-services - 将日志发送到 CloudWatch 后如何清理磁盘
- python - 安装 colorama 时遇到问题
- android - 将 OpenCV 与 Android 项目集成
- tsql - Windows 函数内除以 0 错误
- javascript - 检查是否从输入数组中检查了任何复选框输入
- matlab - 如何计算 DDPG 中的确定性策略梯度?
- python - 如何读取以整数除以空格并分隔为不同行的输入(txt)
- sql - Oracle - 查询以根据其他 ID 填充虚拟数据
- jwt - 从存储在 JWT 中的角色设置授权策略