JEST Won&39;t转换模块-语法错误:不能在模块之外使用IMPORT语句 [英] Jest won't transform the module - SyntaxError: Cannot use import statement outside a module

查看:24
本文介绍了JEST Won&39;t转换模块-语法错误:不能在模块之外使用IMPORT语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

无论我怎么尝试都无法摆脱这个SyntaxError: Cannot use import statement outside a module错误,它变得如此令人沮丧。这里有没有人解决了这个问题?我已经阅读了一百万个Stackoverflow和GitHub问题帖子。没有明确的解决方案。

这是一个反应,打字,webpack的项目。我正在试着测试一个模块。但是Jest不会以某种方式将模块转换为纯javascript

我收到的错误是

/Users/me/dev/Project/project/node_modules/variables/src/variables.js:12
    import './main.js';
    ^^^^^^

    SyntaxError: Cannot use import statement outside a module

      17 | 
      18 | */
    > 19 | import { GlobalVars } from 'variables'
         | ^
      20 | 
      21 | export const Vars = new GlobalVars()
      22 | 

我尝试解决此问题(但没有奏效):

  • babel.config中使用env设置:env.test.preset: ['@babel/plugin-transform-modules-commonjs']

  • 将Jest Configuration中的transform设置修改为'^.+\.jsx?$': 'babel-jest', '^.+\.tsx?$': 'ts-jest',以及围绕此问题的所有其他可能性。

  • 在Jest配置中,testPathIgnorePatternstransformIgnorePatterns

  • 使用.babel.config.js而不是.babelrc.js

.等等。

我有此设置:

Package.json

  "jest": {
    "preset": "ts-jest",
    "testEnvironment": "node"
  }

.babelrc.js

module.exports = {
  presets: [
    ['@babel/preset-env', { targets: { node: 'current' } }],
    '@babel/preset-react',
    '@babel/preset-typescript',
  ],
  plugins: [
    '@babel/plugin-transform-runtime',
    '@babel/proposal-class-properties',
    '@babel/transform-regenerator',
    '@babel/plugin-transform-template-literals',
    'react-hot-loader/babel',
  ],
}

变量.ts

import { GlobalVars } from 'variables'

export const Vars = new GlobalVars()

variables.spec.ts

import { Vars } from './variables.ts'

describe('Test The Package', () => {
  it('Should accept new variables', () => {
    Vars.newVariable = 'new variable'
    expect(Vars.newVariable).toEqual('new variable')
  })
})

关于如何解决此问题有什么想法吗?

推荐答案

虽然我已经单独尝试过,但还没有一起尝试(transformtransformIgnorePatterns)。所以这个JEST配置解决了我的问题:

  "jest": {
    "preset": "ts-jest",
    "testEnvironment": "node",
    "transform": {
      "node_modules/variables/.+\.(j|t)sx?$": "ts-jest"
    },
    "transformIgnorePatterns": [
      "node_modules/(?!variables/.*)"
    ]
  },

我的错误是:

  1. 未将transformtransformIgnorePatterns一起使用
  2. 并将babel-jest定义为转换器,而不是ts-jest(我想当jest的预置定义为ts-jest时会有问题。因为如果我将其更改为babel-jest,它将再次抛出相同的错误。):
--- "node_modules/variables/.+\.(j|t)sx?$": "babel-jest"
+++ "node_modules/variables/.+\.(j|t)sx?$": "ts-jest"

这篇关于JEST Won&39;t转换模块-语法错误:不能在模块之外使用IMPORT语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆