0

With Node 16.13.2 I am trying to add the validate module in an existing code base. Reading the 2 year old question I can't make it work with the below PoC. I get

import Schema from 'validate';
^^^^^^
SyntaxError: Cannot use import statement outside a module

Question

Can anyone show me how the below PoC should look like for it to work?

index.js

const mod = require('./mod');

mod.js

import Schema from 'validate';

const test;
module.exports = test;
Sandra Schlichting
  • 25,050
  • 33
  • 110
  • 162

1 Answers1

1

If you want to use the import syntax of es6+ then you will either need to use .mjs files (instead of regular .js files), or you will need to add in a compilation/transpilation step into your pipeline.

Using .mjs

If you change the file name of your mod.js file to mod.mjs, then this should work:

import Schema form 'validate';
export const test;

Then in index.js you will either have to change index.js to index.mjs and change the contents to:

import { test } from './mod.mjs';

..or you can keep index.js and change the contents to:

(async () {
  const { test } = await import('./mod.mjs')
})();

You can read more in this rather comprehensive article i happened across while googling: https://blog.logrocket.com/how-to-use-ecmascript-modules-with-node-js/

Adding a compilation step

There are many different compilers and/or bundlers to pick from, but for regular vanilla javascript I'd recommend sticking to babel.

Freecodecamp has a tutorial for how to set up babel for use with nodejs: https://www.freecodecamp.org/news/setup-babel-in-nodejs/

Olian04
  • 6,480
  • 2
  • 27
  • 54
  • Thnaks a lot. Is there a simpler solution if I don't want to use `import`? – Sandra Schlichting Jan 14 '22 at 13:41
  • 1
    @SandraSchlichting assuming the library you are trying to import is [this one](https://www.npmjs.com/package/validate), then you should be able to simple require it as normal. `const Schema = require("validate")` – Olian04 Jan 14 '22 at 13:44