You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React 18 + Jest环境用OpenLayers 7.1报SyntaxError,缺哪些配置?

解决Jest测试OpenLayers 7.1时的"Cannot use import statement outside a module"错误

我有一个使用OpenLayers 7.1的小型React组件,导入代码如下:

import Map from "ol/Map";

运行Jest(搭配jest-ts等工具)测试时,出现错误:

/Users/jtiai/Code/react-openlayers/.yarn/cache/ol-npm-7.1.0-d92c823b1e-0935be63be.zip/node_modules/ol/Map.js:4
import BaseObject from './Object.js';
^^^^^^

SyntaxError: Cannot use import statement outside a module

  1 | import React from "react";
  2 | import { Box } from "@mui/material";
> 3 | import Map from "ol/Map";
    | ^
  4 |

需要补充的配置步骤

1. 让Jest转译OpenLayers模块

Jest默认不会处理node_modules里的ES模块代码,但OpenLayers 7.x用的是ES模块语法,得修改Jest配置,让它不忽略OpenLayers的转译。在jest.config.js(或jest.config.ts)里添加:

module.exports = {
  // 其他已有配置...
  transformIgnorePatterns: [
    '/node_modules/(?!ol/)' // 不对ol目录下的代码跳过转译
  ],
  transform: {
    '^.+\\.(ts|tsx|js|jsx)$': 'ts-jest' // 确保用ts-jest处理相关文件
  }
};

2. 确保Babel/TS-Jest支持ES模块

如果项目用了Babel,需要在babel.config.js里配置对应的预设,保证能转译ES模块:

module.exports = {
  presets: [
    '@babel/preset-env',
    '@babel/preset-react',
    '@babel/preset-typescript' // 用TypeScript的话加上这个
  ]
};

3. 可选:配置模块路径映射

如果前面的配置还没解决问题,可以在Jest配置里添加模块路径映射,确保正确解析OpenLayers的导入:

module.exports = {
  // 其他已有配置...
  moduleNameMapper: {
    '^ol/(.*)$': '<rootDir>/node_modules/ol/$1'
  }
};

内容的提问来源于stack exchange,提问作者jtiai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:01:04