【发布时间】:2021-04-18 13:17:35
【问题描述】:
尝试在 azure 应用服务上托管一个简单的 nodejs api 服务器,但是当 azure 尝试部署它时出现以下错误
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: D:\home\site\wwwroot\server.js
require() of ES modules is not supported.
require() of D:\home\site\wwwroot\server.js from D:\Program Files (x86)\iisnode\interceptor.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename server.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from D:\home\site\wwwroot\package.json.
检查了azure app服务,WEBSITE_NODE_DEFAULT_VERSION设置为~14,web app中安装的nodejs版本为v14.15.0。不要再认为这个版本的node有导入导出的问题了。
代码在本地运行得非常好
node server.js
# or
node --experimental-modules server
不知道为什么它在 azure 中失败
我的代码如下:
server.js
import express from 'express';
import bodyParser from 'body-parser';
let app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
let port = process.env.PORT || 8080;
let router = express.Router();
// Middleware to use for all requests
router.use(function(req, res, next) {
next();
});
router.get('/', function(req, res) {
res.json({ message: 'Default home page for the api!' });
});
app.use('/api', router);
// START THE SERVER
// =============================================================================
app.listen(port);
console.log(`Server up and running on port ${port}`);
package.json
{
"name": "my_package",
"version": "1.0.0",
"type": "module",
"scripts": {
"start": "node --experimental-modules server",
"test": "mocha"
},
"dependencies": {
"body-parser": "^1.19.0",
"express": "^4.17.1"
}
}
但是,如果我将导入和导出更改为要求,那么它将在 azure web 应用程序中运行,似乎 azure iisnode 可能与 emac6 不兼容?有谁知道吗?
除了使用 babel 将 emac6 转换为 emac5 之外,任何人都可以解决这个问题?因为我在执行和运行转译的 emac5 代码时遇到了一些问题。
谢谢
【问题讨论】:
标签: javascript node.js azure