轻量的网页代码编辑器

今天写AI项目的时候需要一个在网页展示和输入的代码编辑器,问了gpt有下面这些,对比选择后决定用CodeMirror,因为我们的要求不高,只要使用js就行,也不用太多代码提示 CodeMirror的地址:www.npmjs.com/package/@co...


一、主流代码编辑器方案

1. Monaco Editor (VS Code 内核)

bash 复制代码
npm install monaco-editor
javascript 复制代码
// 初始化示例
import * as monaco from 'monaco-editor';

const editor = monaco.editor.create(document.getElementById('container'), {
  value: '// 写你的JavaScript代码\nconsole.log("Hello")',
  language: 'javascript',
  theme: 'vs-dark',
  minimap: { enabled: true },
  automaticLayout: true
});

核心优势

  • VS Code同款语法高亮/智能提示
  • 支持 TypeScriptJSX 等高级特性
  • 内置 Debugger 集成能力

2. CodeMirror 6 (现代化轻量级)

bash 复制代码
npm install codemirror @codemirror/lang-javascript
javascript 复制代码
import { EditorView } from '@codemirror/view';
import { EditorState } from '@codemirror/state';
import { javascript } from '@codemirror/lang-javascript';

const editor = new EditorView({
  state: EditorState.create({
    extensions: [javascript(), EditorView.theme({
      "&": { fontSize: '14px' },
      ".cm-content": { fontFamily: 'Menlo' }
    })]
  }),
  parent: document.querySelector('#editor')
});

亮点

  • 模块化设计(按需加载)
  • 移动端友好
  • 支持实时协同编辑

3. Ace Editor (Cloud9 同款)

html 复制代码
<!-- CDN 方式直接使用 -->
<div id="editor" style="height:300px"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.0/ace.js"></script>
<script>
  const editor = ace.edit('editor');
  editor.setTheme('ace/theme/monokai');
  editor.session.setMode('ace/mode/javascript');
</script>

特点

  • 开箱即用的传统方案
  • 支持 Emmet 缩写
  • 自带多光标编辑功能

二、功能对比表

特性 Monaco CodeMirror 6 Ace
体积 (gzip) ~8MB ~300KB ~500KB
语法高亮 ✅ 动态加载 ✅ 静态配置 ✅ 全量加载
智能提示 ✅ 最强 ✅ 插件扩展 ⚠️ 需配置
移动端支持 ⚠️ 有限 ✅ 优秀 ⚠️ 一般
协同编辑 ❌ 需额外集成 ✅ 原生支持 ❌ 需插件
主题定制 ✅ 200+主题 ✅ CSS变量 ✅ 50+主题

三、高级功能扩展方案

1. 集成代码执行沙箱

javascript 复制代码
// 使用 iframe 安全执行代码
const iframe = document.createElement('iframe');
iframe.style.display = 'none';
document.body.appendChild(iframe);

function safeEval(code) {
  iframe.contentWindow.eval(`
    try { 
      ${code} 
    } catch(e) { 
      parent.postMessage({ error: e.message }, '*') 
    }
  `);
}

2. 添加 ESLint 实时校验

javascript 复制代码
// 配合 monaco-editor-eslint 插件
import { ESLint } from 'eslint';
import { MonacoEslint } from 'monaco-editor-eslint';

const eslint = new ESLint({ fix: true });
const monacoEslint = new MonacoEslint(eslint, editor);

3. 实现多人协作

javascript 复制代码
// 使用 Yjs 库 + CodeMirror 协同插件
import { WebrtcProvider } from 'y-webrtc';
import { yCollab } from 'y-codemirror';
import { EditorState } from '@codemirror/state';

const doc = new Y.Doc();
const provider = new WebrtcProvider('room-name', doc);
const state = EditorState.create({ extensions: [yCollab(doc.getText('content'))] });

四、移动端优化技巧

css 复制代码
/* 防止手机端键盘遮挡 */
.editor-container {
  height: calc(100vh - env(keyboard-inset-height));
}

/* 禁用长按菜单 */
.editor {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
}

选型建议

  • 企业级应用 → 选 Monaco (功能最全)
  • 教育类网站 → 选 CodeMirror (移动优先)
  • 快速原型 → 选 Ace (CDN直用)
相关推荐
挣扎与觉醒中的技术人3 分钟前
【技术干货】三大常见网络攻击类型详解:DDoS/XSS/中间人攻击,原理、危害及防御方案
前端·网络·ddos·xss
zeijiershuai8 分钟前
Vue框架
前端·javascript·vue.js
写完这行代码打球去10 分钟前
没有与此调用匹配的重载
前端·javascript·vue.js
华科云商xiao徐10 分钟前
使用CPR库编写的爬虫程序
前端
狂炫一碗大米饭13 分钟前
Event Loop事件循环机制,那是什么事件?又是怎么循环呢?
前端·javascript·面试
IT、木易14 分钟前
大白话Vue Router 中路由守卫(全局守卫、路由独享守卫、组件内守卫)的种类及应用场景
前端·javascript·vue.js
顾林海15 分钟前
JavaScript 变量与常量全面解析
前端·javascript
程序员小续15 分钟前
React 组件库:跨版本兼容的解决方案!
前端·react.js·面试
乐坏小陈16 分钟前
2025 年你希望用到的现代 JavaScript 模式 【转载】
前端·javascript
生在地上要上天16 分钟前
从600行"状态地狱"到可维护策略模式:一次列表操作限制重构实践
前端