【问题标题】:Jest: node.js SyntaxError: Cannot use import statement outside a module开玩笑:node.js SyntaxError:无法在模块外使用 import 语句
【发布时间】:2023-01-31 19:25:19
【问题描述】:

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

语言.js

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

export {
    calculateTip,
}

包.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"
    }
}

我已经尝试使用谷歌搜索解决方案,但到目前为止还没有成功。

【问题讨论】:

    标签: node.js jestjs automated-tests syntax-error importerror


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢@felixmosh,虽然这有效,但在安装软件包时有很多折旧警告。在运行 npm install 命令之前,我必须删除 node_modules 目录并安装包。
    【解决方案2】:

    您可以通过安装 jest-babel 然后在您的根目录中创建 babel.config.cjs 并将以下内容粘贴到其中来修复它:

    //babel.config.cjs
    module.exports = {
      presets: [
        [
          '@babel/preset-env',
          {
            targets: {
              node: 'current',
            },
          },
        ],
      ],
    };
    
    ...
    //package.json
    "type": "module"
    
    //tsconfig.json
    ...
    "target": "esnext", 
    "module": "commonjs", 
    ...
    

    【讨论】:

      猜你喜欢
      • 2020-12-02
      • 1970-01-01
      • 2022-06-13
      • 2022-01-25
      • 2020-08-25
      • 2020-10-10
      • 2020-05-02
      相关资源
      最近更新 更多