gpt4 book ai didi

javascript - 如何使用 Phusion Passenger 更正此 ESM 错误?

转载 作者:行者123 更新时间:2023-12-05 00:28:48 27 4
gpt4 key购买 nike

我正在尝试使用 Phusion Passenger 在生产服务器上启动我的 NodeJS API。
我使用最后一个 ECM 语法来导入/导出我的模块。
但是,当尝试访问我的 api 时,Passenger 会返回此错误消息:

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /home/***/api/server.mjs
at Module.load (internal/modules/cjs/loader.js:948:11)
at Function.Module._load (internal/modules/cjs/loader.js:790:14)
at Module.require (internal/modules/cjs/loader.js:974:19)
at Module.require (/opt/passenger/src/helper-scripts/node-loader.js:80:25)
at require (internal/modules/cjs/helpers.js:92:18)
at loadApplication (/opt/passenger/src/helper-scripts/node-loader.js:243:2)
at setupEnvironment (/opt/passenger/src/helper-scripts/node-loader.js:214:2)
at Object.<anonymous> (/opt/passenger/src/helper-scripts/node-loader.js:133:1)
at Module._compile (internal/modules/cjs/loader.js:1085:14)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10) {
code: 'ERR_REQUIRE_ESM'
我有 "type": "module"我的 package.json 中的行,我尝试将扩展名从 .js 更改为 .mjs 无效。
我注意到乘客使用带有“require”语法的 CJS 来加载我的 server.js,我们可以在这里看到: https://github.com/phusion/passenger/blob/stable-6.0/src/helper-scripts/node-loader.js .
function loadApplication() {
var appRoot = PhusionPassenger.options.app_root || process.cwd();
var startupFile = PhusionPassenger.options.startup_file || (appRoot + '/' + 'app.js');
require(startupFile);
}
所以我的 问题 是:有没有办法不将我的所有代码从 ECM 更改为 CJS 以匹配乘客?

最佳答案

有一种方法:考虑到你所有的文件都有 .mjs扩展名,您只需要创建一个 .js作为Passenger的入口文件,在这个文件(CommonJS格式)中你可以动态导入ESM文件。
所以,不要运行 node server.mjs通过Passenger,创建一个entry.js内容如下:

import("./server.mjs");
然后调用 node entry.js通过乘客。
注意:您可以为 entry.js 使用任何其他名称文件。

关于javascript - 如何使用 Phusion Passenger 更正此 ESM 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69297449/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com