Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trying ES6 style import gives 'Cannot use import statement outside a module'

I am trying to write a javascript test in intellij for which I need to import some dependancies and I want to use ES6 style import statements but getting error

/usr/local/bin/node /workspace/rr-sample/node_modules/mocha/bin/_mocha --ui bdd --reporter "/Users/me/Library/Application Support/IntelliJIdea2019.1/NodeJS/js/mocha-intellij/lib/mochaIntellijReporter.js" tests/*.test.js /workspace/rr-sample/tests/App.test.js:3 import chai from 'chai' ^^^^^^  SyntaxError: Cannot use import statement outside a module     at wrapSafe (internal/modules/cjs/loader.js:1043:16)     at Module._compile (internal/modules/cjs/loader.js:1091:27)     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1160:10)     at Module.load (internal/modules/cjs/loader.js:976:32)     at Function.Module._load (internal/modules/cjs/loader.js:884:14)     at Module.require (internal/modules/cjs/loader.js:1016:19)     at require (internal/modules/cjs/helpers.js:69:18)     at /workspace/rr-sample/node_modules/mocha/lib/mocha.js:334:36     at Array.forEach (<anonymous>)     at Mocha.loadFiles (/workspace/rr-sample/node_modules/mocha/lib/mocha.js:331:14)     at Mocha.run (/workspace/rr-sample/node_modules/mocha/lib/mocha.js:809:10)     at Object.exports.singleRun (/workspace/rr-sample/node_modules/mocha/lib/cli/run-helpers.js:108:16)     at exports.runMocha (/workspace/rr-sample/node_modules/mocha/lib/cli/run-helpers.js:142:13)     at Object.exports.handler (/workspace/rr-sample/node_modules/mocha/lib/cli/run.js:292:3)     at Object.runCommand (/workspace/rr-sample/node_modules/yargs/lib/command.js:242:26)     at Object.parseArgs [as _parseArgs] (/workspace/rr-sample/node_modules/yargs/yargs.js:1087:28)     at Object.parse (/workspace/rr-sample/node_modules/yargs/yargs.js:566:25)     at Object.exports.main (/workspace/rr-sample/node_modules/mocha/lib/cli/cli.js:68:6)     at Object.<anonymous> (/workspace/rr-sample/node_modules/mocha/bin/_mocha:10:23)     at Module._compile (internal/modules/cjs/loader.js:1121:30)     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1160:10)     at Module.load (internal/modules/cjs/loader.js:976:32)     at Function.Module._load (internal/modules/cjs/loader.js:884:14)     at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:67:12)     at internal/main/run_main_module.js:17:47  

What exactly is the issue? I found this link (and others) http://xahlee.info/js/js_import_export.html which tells you how to fix this error but in another context which doesn't help me, and it doesn't explain what the problem is.

In case it is helpful here is the code I am using.

//const chai = require("chai"); import chai from 'chai'  const React = require("react"); const expect = chai.expect;  describe('how it works first-time test', () => {   it('checks equality', () => {      const val = false;     expect(val).to.be.false;   });  }); 
like image 677
driftwood Avatar asked Nov 26 '19 02:11

driftwood


People also ask

Can't use import statement outside a module TypeScript?

To solve the error "Cannot use import statement outside a module" in TypeScript, set the module option to commonjs in your tsconfig. json file and make sure to compile your TypeScript files (e.g. with ts-node ), and not to run them directly with node .

How do I use require instead of import?

One of the major differences between require() and import() is that require() can be called from anywhere inside the program whereas import() cannot be called conditionally, it always runs at the beginning of the file. To use the require() statement, a module must be saved with . js extension as opposed to .


1 Answers

The easiest way to run Mocha tests written in ES6 is compiling them on-the-fly using Mocha --require @babel/register option (see https://github.com/mochajs/mocha/wiki/compilers-deprecation#what-should-i-use-instead-then). Of course, you need to make sure to install the corresponding modules and set up the .babelrc accordingly

package.json:

"dependencies": {   "@babel/cli": "^7.7.4",   "@babel/core": "^7.7.4",   "@babel/preset-env": "^7.7.4",   "@babel/register": "^7.7.4", ... } 

.babelrc:

{   "presets": [     [       "@babel/preset-env"     ]   ] } 

enter image description here

See also https://dev.to/bnorbertjs/my-nodejs-setup-mocha--chai-babel7-es6-43ei

like image 194
lena Avatar answered Oct 05 '22 07:10

lena