尝试使用ES6样式导入会导致“无法在模块外部使用导入语句”

时间:2019-11-26 02:11:00

标签: javascript intellij-idea mocha chai

我正在尝试用intellij编写一个javascript测试,为此我需要导入一些依赖关系,并且我想使用ES6样式的导入语句,但是会出错

  

/ 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

     

从“柴”中导入柴

     

^^^^^^^

     

SyntaxError:无法在模块外部使用import语句       在wrapSafe(内部/模块/cjs/loader.js:1043:16)       在Module._compile(内部/模块/cjs/loader.js:1091:27)       在Object.Module._extensions..js(内部/模块/cjs/loader.js:1160:10)       在Module.load(internal / modules / cjs / loader.js:976:32)       在Function.Module._load(内部/模块/cjs/loader.js:884:14)       在Module.require(internal / modules / cjs / loader.js:1016:19)       在要求时(内部/模块/cjs/helpers.js:69:18)       在/workspace/rr-sample/node_modules/mocha/lib/mocha.js:334:36       在Array.forEach()       在Mocha.loadFiles(/workspace/rr-sample/node_modules/mocha/lib/mocha.js:331:14)       在Mocha.run(/workspace/rr-sample/node_modules/mocha/lib/mocha.js:809:10)       在Object.exports.singleRun(/workspace/rr-sample/node_modules/mocha/lib/cli/run-helpers.js:108:16)       在exports.runMocha(/workspace/rr-sample/node_modules/mocha/lib/cli/run-helpers.js:142:13)       在Object.exports.handler(/workspace/rr-sample/node_modules/mocha/lib/cli/run.js:292:3)       在Object.runCommand(/workspace/rr-sample/node_modules/yargs/lib/command.js:242:26)       在Object.parseArgs [作为_parseArgs](/workspace/rr-sample/node_modules/yargs/yargs.js:1087:28)       在Object.parse(/workspace/rr-sample/node_modules/yargs/yargs.js:566:25)       在Object.exports.main(/workspace/rr-sample/node_modules/mocha/lib/cli/cli.cli:68:6)       在对象。 (/ workspace / rr-sample / node_modules / mocha / bin / _mocha:10:23)       在Module._compile(internal / modules / cjs / loader.js:1121:30)       在Object.Module._extensions..js(内部/模块/cjs/loader.js:1160:10)       在Module.load(internal / modules / cjs / loader.js:976:32)       在Function.Module._load(内部/模块/cjs/loader.js:884:14)       在Function.executeUserEntryPoint [作为runMain](内部/模块/run_main.js:67:12)       在internal / main / run_main_module.js:17:47

到底是什么问题?我找到了此链接(及其他链接)http://xahlee.info/js/js_import_export.html,该链接告诉您如何解决此错误,但在另一种情况下却无济于事,也不能解释问题的所在。

如果这对我有帮助,请使用我正在使用的代码。

//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;
  });

});

4 个答案:

答案 0 :(得分:1)

根据https://api.mydomain.com

  

doc

因此,您必须确保将脚本作为es模块执行。

例如使用https://nodejs.org/api/esm.html#esm_code_import_code_statements而非Nodejs执行脚本以启用es6或更高版本。

答案 1 :(得分:1)

将我的ts库之一更新到es6模块而不是commonjs时,我遇到了同样的问题。更改tsconfig.json后,我的npm run test产生了上述错误。

import chai from 'chai'
^^^^^^
SyntaxError: Cannot use import statement outside a module

通过添加自己的tsconfig文件(仅用于测试)解决了这个问题

tsconfig.testing.json

{
  "compilerOptions": {
      "module": "commonjs",
      "target": "es6"
  },
  "include": ["**/*.spec.ts"]
}

要通过package.json中的脚本运行测试

"test": "cross-env TS_NODE_PROJECT=\"tsconfig.testing.json\" mocha -r ts-node/register src/**/*.spec.ts",

(cross-env可以独立于操作系统设置env变量)

答案 2 :(得分:0)

运行用ES6编写的Mocha测试的最简单方法是使用Mocha --require @babel/register选项(见https://github.com/mochajs/mocha/wiki/compilers-deprecation#what-should-i-use-instead-then)动态地编译它们。当然,您需要确保安装相应的模块并相应地设置.babelrc

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

另请参阅https://dev.to/bnorbertjs/my-nodejs-setup-mocha--chai-babel7-es6-43ei

答案 3 :(得分:0)

通过在项目源中添加.mocharc.yaml文件,可以使此工作正常进行:

require: '@babel/register'

来源:https://github.com/mochajs/mocha-examples/tree/master/packages/babel