Vue 2 前端项目中实现 Python 脚本的增删改查(CRUD)功能,并集成一个支持 语法高亮、自动补全(内置函数)、基础语法检查 的 Web 代码编辑器,以下是经过实践验证的 技术栈与插件方案,兼顾兼容性、功能性和开发效率。


一、整体架构

前端(Vue 2)
   │
   ├── HTTP API ←→ 后端(如 Flask / FastAPI / Django)
   │                 │
   │                 └── 管理 .py 文件(读/写/删/列)
   │
   └── Web 代码编辑器(运行在浏览器)
         ├── 语法高亮
         ├── 自动补全(可配置 Python 内置函数)
         └── 基础语法校验(前端轻量级 or 调后端)
⚠️ 重要:真正的 Python 执行和文件存储必须在后端完成!前端仅负责编辑和提交。

️ 二、Web 代码编辑器选型(Vue 2 兼容)

✅ 推荐方案 1:

Monaco Editor

(VS Code 同款内核)

功能最强大,对 Python 支持极佳,但体积较大(~2MB),需按需加载。
✅ 优势:
  • 完整 Python 语言支持(语法高亮 ✅)
  • 智能提示(IntelliSense)✅(可预加载 builtinsossys 等)
  • 实时语法错误提示(需配合 Pyodide 或后端)
  • 折叠、括号匹配、多光标、主题等 VS Code 级体验
Vue 2 集成方式:
# 安装 Monaco Editor + Vue 封装组件(兼容 Vue 2)
npm install monaco-editor
npm install @monaco-editor/vue@^1.5.0  # 注意:v1.x 支持 Vue 2
示例代码(

ScriptEditor.vue

):

<script>
import MonacoEditor from '@monaco-editor/vue'
export default {
  components: { MonacoEditor },
  data() {
    return {
      code: '# Write your Python script here\nprint("Hello, World!")'
    }
  }
}
</script>
自动补全增强(内置函数):

Monaco 默认已包含 Python 基础语法和部分标准库提示。若需强化内置函数(如 len, range, open 等),可通过以下方式:

  1. 利用 Monaco 内置的 Python 语言服务(已包含 builtins)
  2. 或通过 monaco.languages.registerCompletionItemProvider 手动添加:
// 在 mounted 中注册
mounted() {
  const monaco = require('monaco-editor')
  monaco.languages.registerCompletionItemProvider('python', {
    provideCompletionItems: () => {
      const suggestions = [
        { label: 'len', kind: monaco.languages.CompletionItemKind.Function, insertText: 'len(${1:obj})' },
        { label: 'range', kind: monaco.languages.CompletionItemKind.Function, insertText: 'range(${1:start})' },
        { label: 'print', kind: monaco.languages.CompletionItemKind.Function, insertText: 'print(${1:msg})' }
        // 可扩展更多
      ]
      return { suggestions }
    }
  })
}
✅ 实际测试:Monaco 对 Python 内置函数已有较好支持,通常无需手动补充。

✅ 推荐方案 2:

CodeMirror 6

(轻量、模块化)

如果项目对包体积敏感(<500KB),可选 CodeMirror 6(需额外配置 Python 支持)。
⚠️ 注意:
  • CodeMirror 6 官方不直接支持 Vue 2,但可通过 <textarea>ref 手动集成。
  • 需自行引入 @codemirror/lang-python 等包。
安装:
npm install @codemirror/basic-setup @codemirror/state @codemirror/view @codemirror/lang-python
适用场景:
  • 对性能/体积要求极高
  • 不需要复杂 IntelliSense(仅基础高亮+简单补全)
结论优先选 Monaco,除非明确限制包大小。

三、语法检查(Linting)

方案 A:前端轻量级检查(推荐用于实时反馈)

  • 使用 Pyodide(在浏览器中运行 Python 子集)进行语法解析
  • 或使用正则/AST 库(如 acorn 不支持 Python)
❌ 问题:Pyodide 体积大(~10MB),不适合所有场景。

方案 B:调用后端 API 校验(推荐!)

  • 用户点击“保存”或“校验”按钮时,将代码发给后端
  • 后端用 ast.parse()py_compile.compile() 检查语法
# Flask 示例
from flask import request
import ast
@app.route('/api/check-syntax', methods=['POST'])
def check_syntax():
    code = request.json['code']
    try:
        ast.parse(code)
        return {'valid': True}
    except SyntaxError as e:
        return {'valid': False, 'error': str(e)}, 400
✅ 优点:准确、安全、不增加前端负担。

️ 四、脚本 CRUD 功能实现

前端(Vue 2):

  • 使用 axios 调用后端 REST API
  • 列表页:展示脚本名称、修改时间
  • 编辑页:集成 Monaco Editor
  • 操作:新建 / 保存 / 删除 / 下载

后端 API 设计示例:

方法路径功能
GET/scripts获取脚本列表
POST/scripts创建新脚本
GET/scripts/{name}获取脚本内容
PUT/scripts/{name}更新脚本
DELETE/scripts/{name}删除脚本
POST/scripts/{name}/check语法检查

五、完整技术栈总结

类别推荐方案
前端框架Vue 2 + Vue CLI / Webpack
UI 组件库Element UI(Vue 2 官方推荐)
HTTP 客户端Axios
代码编辑器Monaco Editor + @monaco-editor/vue@1.x
语法高亮/补全Monaco 内置 Python 支持
语法检查调用后端 API(用 Python ast 模块)
后端语言Python(Flask / FastAPI)或 Node.js
部署Nginx + Gunicorn(Python) / PM2(Node.js)

✅ 最终建议

  1. 编辑器选 Monaco:功能强、体验好、Vue 2 有成熟封装。
  2. 语法检查走后端:准确可靠,避免前端复杂度。
  3. 不要在前端执行 Python:安全风险高,且浏览器无法真正运行 .py
  4. 文件存储在后端:通过 API 管理 .py 文件,前端只传字符串。

参考资源

  • Monaco Vue 2 组件:https://github.com/superRaytin/monaco-editor-vue (v1 branch)
  • Monaco Python 示例:https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-configure-javascript-defaults
  • Flask + Python 语法检查:https://docs.python.org/3/library/ast.html

按照此方案,你可以在 Vue 2 项目中快速搭建一个专业级的 Python 脚本管理平台,满足企业级开发需求。