开玩笑:node.js 语法错误:无法在模块外部使用 import 语句

MrS*_*ngh 12 automated-tests syntax-error importerror node.js jestjs

我刚刚开始学习jest测试并创建了一个示例应用程序来熟悉jest测试。但是,我收到以下错误...

在此输入图像描述

语言.js

const calculateTip = (total, percentage) => {
    return total + ((percentage / 100) * total) + 1;
};

export {
    calculateTip,
}
Run Code Online (Sandbox Code Playgroud)

包.json

{
    "dependencies": {
        "express": "^4.18.2"
    },
    "type": "module",
    "main": "src/app.js",
    "scripts": {
        "start": "node src/app.js",
        "test": "cls && env-cmd -f ./envs/test.env jest --watchAll"
    },
    "devDependencies": {
        "env-cmd": "^10.1.0",
        "jest": "^29.2.2",
        "supertest": "^6.3.1"
    }
}
Run Code Online (Sandbox Code Playgroud)

我曾尝试通过谷歌搜索解决方案,但到目前为止还没有运气。

fel*_*osh 8

Node.js 仅从 v16 开始支持 esm 语法,但 jest 尚不支持。因此,你有2个选择:

  1. 不要使用 esm 语法 ( import/ export)
  2. 添加jest-babel及其配置,将 esm 语法转换(转换)为 cjs 语法。


Cal*_*lum 7

Jest 现在提供了对 ECMAScript 模块 (ESM) 的实验性支持:

https://jestjs.io/docs/ecmascript-modules

最简单的方法是更新您的测试脚本以node使用--experimental-vm-modules例如执行

node --experimental-vm-modules node_modules/jest/bin/jest.js
Run Code Online (Sandbox Code Playgroud)

或者将环境变量添加到测试脚本中

NODE_OPTIONS=--experimental-vm-modules npx jest
Run Code Online (Sandbox Code Playgroud)

请参阅上面的链接了解更多详细信息。