gpt4 book ai didi

javascript - 运行 js 测试 - 获取 "Cannot use import statement outside of a module"

转载 作者:行者123 更新时间:2023-12-02 20:52:26 26 4
gpt4 key购买 nike

我添加了type: module,但这没有帮助。

我正在尝试运行对源文件使用 importexport 的 mocha 或 jest 测试。

有关此问题的现有问题的具体情况与我的不同,我还发现对于具有我的具体情况的人来说,这些问题令人困惑,特别是因为我已经制定了一个具体的答案,其中的详细信息与现有问题无关,但与其他人和我的情况一样。

最佳答案

过去,如果不使用 Babel 转译代码,则无法在 Node 中使用 ES 模块(即 import/export)。然而,Node 中对 ES 模块的支持现已成为现实,Jest 和 Mocha 最近也添加了对原生使用 ES 模块的支持。

然而,这不仅仅需要将 "type": "module" 添加到您的 package.json 中。

在 Jest 中使用原生 ES 模块的步骤

  1. 如前所述,将 "type": "module" 添加到您的 package.json

  2. jest-environment-nodejest-environment-jsdom-sixteen 安装到您的开发依赖项中。例如:

    $ npm i -D jest-environment-node
  3. 更新 package.json 中的 Jest 配置并添加 testEnvironment 设置。例如:

    "jest": {
    "testEnvironment": "jest-environment-jsdom-node"
    }
  4. 如果您使用的 Node 版本早于 13.2,则在运行 Node 时需要添加两个附加标志:--experimental-modulesexperimental-vm -模块。我使用 npx 来执行命令,尽管它有点冗长:

    $ npx --node-arg=--experimental-modules --node-arg=--experimental-vm-modules jest

这将使用适当的节点标志运行所有 Jest 测试。如果您愿意的话,我建议您将其作为 package.json 中的 test 脚本。

现在您应该能够在没有 Babel 的情况下使用 import/export 了!

最后一点很重要:在 Node 中使用原生 ES 模块时,您必须使用本地模块的整个导入路径,包括文件扩展名。例如:

import lib from "./my/lib.js"

这里是关于原生 ES 模块的 Node 文档,如果您想更详细地了解这一点:https://nodejs.org/dist/latest-v14.x/docs/api/esm.html

我还建议阅读此 Github 问题,了解有关 native ES 模块的 Jest 实现的更多详细信息:https://github.com/facebook/jest/issues/9430

关于javascript - 运行 js 测试 - 获取 "Cannot use import statement outside of a module",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61575545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com