ts-jest無法編譯執行ESM【解決步驟】

TateWang發表於2024-03-30

很常見的錯誤就是 SyntaxError: Unexpected token 'export',需要確保以下操作,才能解決問題

  1. tsconfig.json 中 compilerOptions.module 與 target 要設定為 ESNext,compilerOptions.target 也要設定為 ESNext, esModuleInterop 設定為 true, 確定tsc將目的碼編譯為 ESM版本。其次 moduleResolution 設定為 'node' 以便能夠正確解析路徑。
  2. 如果你的原始碼中存在自定義的包,例如使用 rollup 構建,則 rollup.config.js 中要設定指定的模組化規範
import typescript from '@rollup/plugin-typescript';

export default {
  input: 'src/index.ts',
  output: {
    dir: 'dist',
    format: 'es'
  },
  plugins: [typescript()]
};
  1. jest.config.js 中配置 babel-jest
// jest.config.js 或 package.json 中的 Jest 配置
module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  transform: {
    '^.+\\.tsx?$': 'ts-jest',
    '^.+\\.jsx?$': 'babel-jest', // 使用 babel-jest 進行轉換
  },
  moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
  // 新增其他 Jest 配置
};
  1. 在 babel.config.json 中配置預設
{
  "presets": ["@babel/preset-env"]
}
  1. 或者使用 babel.config.js 檔案
// babel.config.js
module.exports = {
  presets: [
    ['@babel/preset-env', { targets: { node: 'current' } }]
  ]
};

相關文章