11

我很高兴使用 node 8.6 并打开了实验性 ES6 模块选项(--experimental-modules)。这让我可以完美地为 node 编写简单的 ES2015 代码,而无需 babel。

问题是当我尝试用 jest 创建一些测试时,它无法抱怨语法错误:“意外的令牌导入”。

.babelrc 配置如下:

{
  "env": {
    "test": {
      "presets": [
        ["env", {
          "targets": {
            "node": "8.6"
          }
        }]
      ]
    }
  }
}

我的 jest.config.js 如下:

module.exports = {
  testMatch: ['/tests/**/*.js', '**/?(*.)test.js'],
}

抛出的错误:

    /app/tests/integration/controller/data-provider/Credentials/CredentialsList.action.test.js:2
    import { Credentials, AdWordsCredentials } from '../../../../../imports/models/data-provider/Credentials.mjs';
    ^^^^^^

    SyntaxError: Unexpected token import

      at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:305:17)
          at Generator.next (<anonymous>)
          at Promise (<anonymous>)

相关包:

  • babel-core@^6.26.0
  • 开玩笑@^21.2.1
  • babel-jest@^21.2.0
  • babel-preset-env@^1.6.0

任何帮助将不胜感激。谢谢 :)

更新:我尝试使用以下命令在没有 babel 的情况下调用 jest,没有任何更改:node --experimental-modules node_modules/.bin/jest

4

2 回答 2

4

Jest 有一个自定义实现require来帮助模拟。不幸的是,这使得 jest 与node --experimental-modules. Babel 可能是使用 ES6 模块的最佳方式。见https://github.com/facebook/jest/issues/4842

于 2017-12-30T18:32:40.407 回答
-2

我没有开玩笑,我不确定这是否会解决,但我希望这可以帮助你。

Node 仍然不支持所有语法。如果您真的正在寻找一种更快的开始开发方式,使用具有 Ecmascript2017 的所有功能的源代码,您需要一个像 @kawix/core https://www.npmjs.com/package/@kawix/core这样的模块

README.md 怎么说,允许您使用所有功能,包括“imports”和“async/await”,还支持 typescript 和其他良好功能,所有这些都没有很多依赖项。您可以直接与 cli 一起使用:

> npm install -g @kawix/core
> kwcore /path/to/fullsyntaxtsupport.js

或者,如果您想以编程方式包含,请创建一个文件示例 main.js 以导入完整的语法文件

var kawix= require("@kawix/core")
kawix.KModule.injectImport()
kawix.KModule.import("/path/to/fullsyntaxtsupport.js").catch(function(e){
    console.error("Some error: ",e)
})
于 2019-03-02T21:28:41.703 回答