react-repl-plus
Version:
React component for editing React components, it is similar to vue repl
53 lines (48 loc) • 1.78 kB
text/typescript
import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'
import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'
import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'
import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker'
import * as monaco from 'monaco-editor';
let initted = false
export function initMonaco() {
if (initted) return
loadMonacoEnv()
initted = true
}
export function loadMonacoEnv() {
self.MonacoEnvironment = {
getWorker(_: any, label: string) {
switch (label) {
case 'json':
return new jsonWorker()
case 'css':
case 'scss':
case 'less':
return new cssWorker()
case 'typescript':
case 'javascript':
return new tsWorker()
default:
return new editorWorker()
}
}
};
monaco.languages.typescript.javascriptDefaults.setCompilerOptions({
target: monaco.languages.typescript.ScriptTarget.ES2022,
allowNonTsExtensions: true,
allowJs: true,
jsx: monaco.languages.typescript.JsxEmit.React,
moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,
module: monaco.languages.typescript.ModuleKind.ESNext,
esModuleInterop: true,
typeRoots: ['node_modules/@types'],
})
monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
...monaco.languages.typescript.javascriptDefaults.getCompilerOptions(),
allowSyntheticDefaultImports: true,
strict: true,
})
// 添加默认 lib(重要,否则编辑器不知道 DOM 类型等)
monaco.languages.typescript.typescriptDefaults.setEagerModelSync(true)
monaco.languages.typescript.javascriptDefaults.setEagerModelSync(true)
}