"SyntaxError: Cannot use import statement outside a module" with Babel, Jest, and webpack 使用Babel,Jest和webpack时出现“SyntaxError: Cannot use import statement outside a module”的错误。

21 浏览
0 Comments

"SyntaxError: Cannot use import statement outside a module" with Babel, Jest, and webpack 使用Babel,Jest和webpack时出现“SyntaxError: Cannot use import statement outside a module”的错误。

我在Babel 7、Webpack 4和Jest的配置方面遇到了问题。当我运行测试时,出现以下错误:SyntaxError: 无法在模块外部使用import语句。\npackage.json\n

 "@babel/core": "^7.7.5",
    "@babel/highlight": "^7.8.3",
    "@babel/plugin-syntax-dynamic-import": "^7.8.3",
    "@babel/preset-env": "^7.8.4",
    "babel-core": "^7.0.0-bridge.0",
    "babel-loader": "^7.1.5",
    "@babel/plugin-transform-runtime": "^7.7.4",
    "@babel/preset-react": "^7.7.4",
    "@babel/runtime": "^7.8.4",
    "babel-jest": "^24.9.0",
    "jest-watch-typeahead": "^0.4.2",
    "vue-jest": "^3.0.5",
    "jest": "^24.9.0",
    "jest-serializer-vue": "^2.0.2",
    "jest-transform-stub": "^2.0.0",

\nwebpack.config.js\n

  entry: {
      app: ["./src/index.js"]
  },
  output: {
    path: path.resolve('../', 'static/js/'), 
    filename: "[name].js",
    publicPath: '/static/js/', 
    chunkFilename: '[name].chunk.js' 
  }, 

\n.babelrc - 我认为问题出在module: false上,但如果我不包含它,Webpack不会将我的文件进行分块。\n\n{\n \"presets\": [\n [\"@babel/preset-env\", {\"modules\": false}, \"jest\" ]\n ],\n \"plugins\": [\n \"@babel/plugin-syntax-dynamic-import\" \n ],\n \"env\": { \n \"test\": {\n \"plugins\": [\"@babel/plugin-transform-runtime\"],\n }\n }\n} \n\n当我移除module: false后,测试可以正常运行,有没有可能在测试中不包含module: false呢?

0
0 Comments

自从jest.4.0版本开始,不再需要转换代码以支持测试中的esm,因为jest已经原生支持。你可以在这里找到如何实现这一点,因为这还没有被记录下来。

这个问题的出现原因是因为使用了Babel、Jest和webpack时出现了"SyntaxError: Cannot use import statement outside a module"错误。这个错误的解决方法如下:

1. 首先,确保你的Jest版本是4.0或更高版本。如果不是,请升级到最新版本。

2. 确保你的代码中没有使用Babel转换器。自从Jest.4.0版本开始,不再需要转换代码以支持esm。

3. 确保你的webpack配置正确。你可以检查webpack配置文件中的module.rules,确保正确地处理了esm文件。

4. 如果你仍然遇到"SyntaxError: Cannot use import statement outside a module"错误,可以尝试在jest.config.js文件中添加"transformIgnorePatterns"选项。在这个选项中,你可以指定不需要转换的文件或文件夹。例如,如果你的esm代码在src/esm文件夹中,你可以添加以下配置:

module.exports = {
  transformIgnorePatterns: [
    "/node_modules/",
    "/src/esm/"
  ]
};

通过以上步骤,你应该能够解决"SyntaxError: Cannot use import statement outside a module"错误。

0
0 Comments

问题原因:无法在模块外部使用import语句,因为import语句只允许在ES模块中使用。而在Node中运行的测试使用的是commonjs模块。

解决方法:尝试在package.json文件中添加"type": "module"。同时检查所使用的Node版本,可以在Node文档中找到更多信息。

我已经尝试过了,不幸的是没有起作用。babelrc中的module:false是否排除了package.json中的type: module?

文章内容如下:

在使用Babel、Jest和Webpack时,可能会遇到一个错误:"SyntaxError: Cannot use import statement outside a module"。这个错误的原因是import语句只允许在ES模块中使用,而你的测试是在Node中运行的,使用的是commonjs模块。

为了解决这个问题,你可以尝试在package.json文件中添加"type": "module"。这样可以告诉Node使用ES模块。同时,你还需要检查所使用的Node版本是否支持ES模块。你可以在Node文档中找到更多关于此问题的信息。

如果你已经尝试过在package.json中添加"type": "module",但仍然无法解决问题,那么可能是因为babelrc文件中的module:false排除了package.json中的type: module。你可以尝试删除或修改babelrc文件中的相关配置,以使其与package.json中的配置一致。

希望这篇文章能帮助你解决"SyntaxError: Cannot use import statement outside a module"的问题。如果你还有其他问题或疑惑,请查阅相关文档或寻求进一步的帮助。

0
0 Comments

"SyntaxError: Cannot use import statement outside a module" with Babel, Jest, and webpack 是一个在使用 Babel、Jest 和 webpack 时经常遇到的问题。这个错误的原因是在测试过程中,由于模块的加载机制不同,导致了 import 语句在模块之外无法使用。

根据 Babel 的文档,在测试环境下可以通过重新声明插件的方式来解决这个问题。具体做法是在 env.test 对象中重新声明插件,并将 "modules" 设置为 "auto"。下面是一个示例的配置文件:

{

"presets": [

[

"@babel/preset-env",

{

"modules": false

},

"jest"

]

],

"plugins": [

"@babel/plugin-syntax-dynamic-import"

],

"env": {

"test": {

"presets": [

[

"@babel/preset-env",

{

"modules": "auto"

},

"jest"

]

],

"plugins": [

"@babel/plugin-transform-runtime"

]

}

}

}

通过以上配置,可以在测试环境中正确地使用 import 语句而不会出现 "SyntaxError: Cannot use import statement outside a module" 的错误。

0