在升级到monaco-editor 0.21.0之后,在开玩笑的测试中,“标识符'global'已在compileFunction上声明”

问题描述

我将我的react项目升级为使用monaco-editor版本0.21.0,因为从那时开始,对于导入了monaco-editor的文件的开玩笑的测试开始失败,并出现以下错误

● Test suite Failed to run

/Users/omerharoon/Documents/code/packages/webapp/node_modules/monaco-editor/esm/vs/editor/editor.api.js:20
const global = self; // Set defaults for standalone editor
      ^

SyntaxError: Identifier 'global' has already been declared
    at compileFunction (<anonymous>)

  2 | 
  3 | import React from 'react';
> 4 | import * as monaco from 'monaco-editor';
    | ^
  5 | import { Resizable } from 're-resizable';
  6 | import {
  7 |   getLanguageFromFilename,at Runtime._execModule (node_modules/jest-runtime/build/index.js:1179:56)
  at Object.<anonymous> (src/components/helpers/MonacoEditor/index.tsx:4:1)
  at Object.<anonymous> (src/components/helpers/MonacoEditor/monaco_colorization.spec.tsx:6:1)

这是在升级后立即开始的,旧版本是0.19.3,所有测试在该版本上都可以正常工作。 monaco-editor-webpack-plugin也从1.9.0升级到2.0.0

我们是直接从摩纳哥进口

node_modules/monaco-editor/esm/vs/editor/editor.api

为了克服延迟加载问题。

最佳配置:

"jest": {
"modulePaths": [
  "<rootDir>/src"
],"collectCoverageFrom": [
  "**/*.{js,jsx,ts,tsx}","!**/*.d.ts","!**/node_modules/**","!**/public/**","!**/next.config.js","!**/server.js"
],"setupFilesAfterEnv": [
  "<rootDir>/setupTests.js"
],"testPathIgnorePatterns": [
  "<rootDir>/node_modules/","<rootDir>/.next/","<rootDir>/public/","<rootDir>/config/","<rootDir>/next.config.js","<rootDir>/server.js","<rootDir>/build/"
],"transform": {
  "^.+\\.[jt]sx?$": "babel-jest","^.+\\.css$": "<rootDir>/config/jest/csstransform.js"
},"transformIgnorePatterns": [
  "/node_modules/(?!monaco-editor)/","^.+\\.module\\.(css|sass|scss)$"
],"moduleNameMapper": {
  "^monaco-editor$": "monaco-editor/esm/vs/editor/editor.api","^.+\\.module\\.(css|sass|scss)$": "identity-obj-proxy"
},"coverageReporters": [
  "text",[
    "lcov",{
      "projectRoot": "../../"
    }
  ]
]},

解决方法

升级到monaco-editor 0.23.0为我解决了这个问题。