import { EditorView, basicSetup } from 'codemirror'; import { javascript } from '@codemirror/lang-javascript'; let editor: EditorView = null; type CreateOpts = { jsx?: boolean; typescript?: boolean; }; /** * 创建单例 * @param el * @returns */ const createEditorInstance = (el?: HTMLDivElement, opts?: CreateOpts) => { if (editor && el) { editor.dom.appendChild(el); return editor; } else if (editor) { return editor; } const { jsx, typescript } = opts || {}; editor = new EditorView({ extensions: [basicSetup, javascript({ jsx, typescript })], parent: el || document.body, }); return editor; }; /** * 每次都创建新的实例 * @param el * @returns */ export const createEditor = (el: HTMLDivElement, opts?: CreateOpts) => { return new EditorView({ extensions: [basicSetup, javascript({ jsx: opts?.jsx, typescript: opts?.typescript })], parent: el || document.body, }); }; export { editor, createEditorInstance };