How to Import Native Modules using the new ES6 Module Syntax

David Fekke
Node.js Collection
Published in
2 min readFeb 20, 2021
Photo of the B-24 bomber Panchito from Sun-n-Fun 2018

Taken from by blog and youtube channel.

I came across a use case of using the newer import/export syntax in JavaScript where I was not able to import a native module in Node.js. Node.js recently enabled the ability to have your project use import/export syntax rather than the Common.js `require` method. Unfortunately the import/export will not work with native modules, but there is a workaround if you look closely enough in the docs.

Native modules

Node.js has always allowed developers to write code or use libraries that are written in C/C++. This allows developers to take advantage of libraries and code that are already optimized to run natively, like the `talib` stock analysis library. Here is an example of this library being imported into a node application using the older Common.js syntax;

const talib = require('talib');console.log("TALib Version: " + talib.version);

ES6/ES2015 import/export Syntax

The newer `import\export` syntax is turned off by default in Node, but you can use these newer style modules by either giving your files a .ejs file extention, or by setting the `type` setting in your project.json file to ‘module’. If you do not set the `type` setting it defaults to ‘commonjs’.

Normally you would be able to import the module using the following syntax in Node.js;

import axios from 'axios';

In order to use the native module you will have to import the createRequire function from the ‘module’ module. Here is an example of how to use the createRequire method to import the TAlib modile;

import { createRequire } from 'module';const require = createRequire(import.meta.url);const talib = require('talib');console.log("TALib Version: " + talib.version);
// Result will be "TALib Version: 1.1.3"

As you can see from the previous example once you import the `createRequire` function it will work like the older Common.js syntax. Hopefully this will solve your problems with using native modules.

--

--

David Fekke
Node.js Collection

I am a software engineer and commercial pilot in jacksonville, Fl. I also produce videos for the Polyglot Engineer Channel on YouTube.