• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

625
Views
Azure App Service - Nodejs ES Module Error

Trying to host a simple nodejs api server on azure app service, but getting the following error when azure tries to deploy it

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.

Checked the azure app service, WEBSITE_NODE_DEFAULT_VERSION is set to ~14, and the installed nodejs version is v14.15.0 in the web app. Don't think this version of node has problem with import export anymore.

The code runs perfectly fine locally with either

node server.js 
# or
node --experimental-modules server

Not sure why it is failing in azure

My code is below:

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"
    }
  }
  

However, if I change the import & export to require, then it will run in azure web app, it seems like perhaps azure iisnode is not compatible with emac6 yet? Anyone knows?

Anyone has any work around of this beside using babel to transpile emac6 down to emac5? As I have having some problem with executing and running the transpiled emac5 code.

Thankz

about 3 years ago · Santiago Trujillo
3 answers
Answer question

0

This can be solved by adding a new file next to your server.js and configuring it as the app service's (or more specifically iisnode's) entry point (see your web.config).

Let's call the new file run.cjs and put only the following line into it:

import("./server.js");

The cjs file extension is important because it tells Node that this file is not a ES module, as it would expect because of "type": "module" in your package.json. This allows other CommonJS files to include our new file - namely iisnode's interceptor.js. It again imports the server.js which then runs fine as ES module.

about 3 years ago · Santiago Trujillo Report

0

Add "type": "module" in package.json file. It work for me.

{
  "name": "module-error",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "start": "node --experimental-modules server",
    "test": "mocha"
  },
  "dependencies": {
    "body-parser": "^1.19.0",
    "express": "^4.17.1"
  },
  "author": "",
  "license": "ISC",
  "type": "module"
}

enter image description here

about 3 years ago · Santiago Trujillo Report

0

Adding to what @sibbl said

  1. Just open your web.config
  2. search for server.js replace it with run.cjs

It Works! Thanks again @sibbl

about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error