前端实现 python 编译器

444 阅读1分钟

,前端实现 python 编译器,整体包含两个部分:

  • 一部分是编译器的样式(背景、主题、换行、行号等等)
  • 另外一部分是编译运行的功能

编译器

编译器的选择较多一些,比如 CodeMirror 。实现简版的甚至可以使用文本域(使用文本域具有一定的限制性,无法进行语法检查)

image.png

编译运行

编译的部分可以使用 Pyodide (Pyodide 是基于 WebAssembly 的Python 发行版,能让浏览器和 Node.js 运行python程序)

由于一部分特殊的需求,并没有找到比较合适的 npm 包,所以选择直接引入 js 依赖(cdn 也可以,但会受访问速度影响)

引入:

https://cdn.jsdelivr.net/pyodide/v0.20.0/full/pyodide.js

注意:在脚手架项目中,直接引入的资源文件,需要放在目录 public/static/... 下才能生效。

使用

如下代码就可以执行一些简单的 python 语句:

image.png

<input  v-model="code" />  
<button @click="runPython()">运行</button>  
<div>输出:</div>  
<textarea v-model="result" style="width: 100%;" rows="10" disabled></textarea>  
  
<script>  

    mounted() {
     this.result = "初始化中..."; 
     this.code = "print('hello word!')"
    }
    
    // 初始化 Pyodide  
    async main() {  
        let pyodide = await loadPyodide();  
        this.result += "Ready!\n";  
        return pyodide;  
    }  
    let pyodideReadyPromise = main();  

    async runPython() {  
        let pyodideReadyPromise = main();
        let pyodide = await pyodideReadyPromise;  
        try {  
            this.result = pyodide.runPython(this.code)
        } catch (err) {  
            this.result = err
        }  
    }  
</script>  

引入的资源文件较多时可能遇到的问题

由于文件较多,提交Git 可能遇到如下问题:

image.png

解决方法:

进入项目的.git文件夹(文件夹默认隐藏,可先设置显示或者命令ls查找),再进入hooks文件夹,删除pre-commit文件,重新git commit -m 'message'即可。(pre-commit可以用来在提交前检查代码错误)

其他解决方式

git commit --m "message" 或者 git commit --no-verify -m "message"

1678843757023.png