How to use ES6 import syntax in Node.js

Introduction
A module is a JavaScript files that can export one or more values. These values can be variables, objects, or even functions.
JavaScript does not have built-in support for modules, but the community has created impressive work-arounds. The two most important standards are:
  • CommonJs Modules - What we know as the require() method for importing modules and module.exports for exporting. This is designed for synchronous loading and mainly used for server.

  • Asynchronous Module Definition (AMD) - The most popular implementation of this standard is RequireJS. This is designed for asynchronous loading and mainly used for browsers.

  • ES6 Import
    The goal for ECMAScript 6 modules was to create a format that both users of CommonJS and of AMD are happy with. The syntax for importing modules looks like this..
    import Express from 'express'; // for default imports
    
    import { foo } from 'bar'; // for named imports
    and exporting with named and default exports like this..
    export const MAX_USERS = 20; // Named exports
    
    function sayHi(name) {
      console.log(`Hi ${name}!`);
    }
    
    export default sayHi; // Default export
    How to use it
    If you try to run this code directly then you would get an error something like
    SyntaxError: Cannot use import statement outside a module
    Now, if you are using Node.js version 14.x.x or above then the simplest fix is to add "type": "module" in your package.json file.
    {
      "type": "module"
    }
    However if you are on any version below 14, you would have to use Babel to compile your code before running it.
    Note: Babel is not framework or platform opinionated. This means that it can be used in any project that is written in JavaScript and thus, in a Node.js project as well.
    Let's start by installing some dev dependencies,
    yarn add -D @babel/core @babel/preset-env @babel/node
    
    # OR
    
    npm install -D @babel/core @babel/preset-env @babel/node
    Next is to create a babel.config.json file and add the following config,
    {
      "presets": ["@babel/preset-env"]
    }
    Now you just have to use babel-node instead of node, so your start/dev script may look like this now
    {
      "scripts": {
        "dev": "nodemon --exec babel-node server.js"
      }
    }
    Hope this was helpful. See you in another one 👋

    27

    This website collects cookies to deliver better user experience

    How to use ES6 import syntax in Node.js