monaco-editor 简单使用

博客介绍了Vue的文件调用示例,包括安装package包并注意版本号、配置vue.coinfig.js及调用示例。还说明了支持的语言类型,以及常用事件,如销毁编辑器、实时获取和设置编辑器的值等。

一. 文件调用示例

1. 安装package包 官方文档

"monaco-editor": "^0.28.1",
"monaco-editor-webpack-plugin": "^4.2.0",

请注意安装包的版本号

monaco-editor-webpack-pluginmonaco-editor
7.*.*>= 0.31.0
6.*.*0.30.*
5.*.*0.29.*
4.*.*0.25.*, 0.26.*, 0.27.*, 0.28.*
3.*.*0.22.*, 0.23.*, 0.24.*
2.*.*0.21.*
1.9.*0.20.*
1.8.*0.19.*
1.7.*0.18.*

2.配置vue.coinfig.js

在vue.coinfig.js中增加如下配置:

const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');

module.exports = {
  lintOnSave: false,  
  configureWebpack: {
    plugins: [
      // 配置JS在线代码编辑器monaco-editor的辅助文件
      new MonacoWebpackPlugin(),
    ],
  },
};

3. 调用示例

<template>
  <div>
    <div ref="codeContainer" class="coder-editor"></div>
  </div>
</template>

<script>
import * as monaco from 'monaco-editor';
export default {
  
  data() {
    return {
      monacoEditor: null, // 语言编辑器
    }
  },

  mounted(){
    this.init()
  },

  methods: {
    init(){
      if(this.$refs.codeContainer){
        // 初始化编辑器,确保dom已经渲染
        this.monacoEditor = monaco.editor.create(this.$refs.codeContainer, {
            value: '', // 编辑器初始显示文字
            language: 'json', // 语言
            automaticLayout: true, // 自动布局
            theme: 'vs', // 官方自带三种主题vs, hc-black, or vs-dark
            minimap: { // 关闭小地图
              enabled: false,
            },
            lineNumbers: 'off', // 隐藏控制行号
        });
      }
    }
  }
}
</script>

<style lang="scss" scoped>
.coder-editor{
  width: 100%;
  height: 160px;
  border: 1px solid rgba(0, 0, 0, 0.08);
}
</style>

二. 属性说明

{
    value: '', // 编辑器初始显示文字
    language: 'javascript', // 语言javascript | json
    automaticLayout: true, // 自动布局
    theme: 'vs', // 官方自带三种主题vs, hc-black, or vs-dark
    foldingStrategy: 'indentation', // 代码可分小段折叠
    overviewRulerBorder: false, // 不要滚动条的边框
    lineNumbers: 'off', // 控制行号的出现on | off
    scrollbar: { // 滚动条设置
      verticalScrollbarSize: 4, // 竖滚动条
      horizontalScrollbarSize: 6, // 横滚动条
    },
    readOnly: false, // 是否只读 Defaults to false | true
    minimap: { // 关闭小地图
      enabled: false,
    },
    cursorStyle: 'line', // 光标样式
    automaticLayout: false, // 自动布局
    fontSize: 14, // 字体大小
    tabSize: 2, // tab缩进长度
    autoIndent: true, // 自动布局
}

支持的语言类型

在项目的node_modules/monaco-editor/min/vs/basic-languages目录下能看到支持的语言类型:

三. 常用事件

销毁编辑器

this.monacoEditor.dispose();

实时获取编辑器的值

this.monacoEditor.onDidChangeModelContent(() => {
  this.monacoEditor.getValue() // 获取编辑器中的语句
})

设置编辑器的值

this.monacoEditor.setValue(newValue)

其它事件

editor.setValue('console.log("Hello world!");');    //设置值
editor.getValue();  //获取值

editor.getSelection();  //获取选中的行信息

editor.getModel().getLineContent(1);    //获取某一行的内容
editor.getModel().getLinesContent();    //获取每一行的内容

monaco.editor.setTheme('vs-dark');      //设置主题

editor._configuration._rawOptions.language  //获取编辑器当前语言(初始化值)
editor.getModel().getLanguageId()           //动态(已改变编辑器语言)

//改变属性
editor.updateOptions({
  //关闭行号
  lineNumbers: "off"
});

//内容改变事件
editor.onDidChangeModelContent(function(e){
  console.log(e);
  console.log(editor.getValue());
});

//添加按键监听
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_S, function () {
  console.log('Ctrl + S 保存')
})

editor.trigger('a', 'editor.action.formatDocument') //触发:格式化文档,更多支持项:editor._actions

//渲染代码得到HTML
monaco.editor.colorize('console.log("Hello world!");', 'javascript').then(function (data) {
    console.log(data);
});

//渲染节点代码
<pre id="code" data-lang="javascript" style="width:500px;">console.log("Hello world!");</pre>
monaco.editor.colorizeElement(document.getElementById('code'));
### 配置 Monaco Editor 的本地安装方法 对于希望在项目中集成 `monaco-editor` 而不依赖 CDN 来源的情况,可以采用 npm 或 yarn 进行包管理工具来完成安装。通过这种方式能够更好地控制版本并简化部署流程。 #### 安装 monaco-editor 和相关插件 首先,在命令行执行如下操作以引入必要的库: ```bash npm install monaco-editor --save ``` 或者如果使用的是 Yarn,则应运行: ```bash yarn add monaco-editor ``` 这会下载最新稳定版的 `monaco-editor` 并将其添加到项目的依赖列表中[^3]。 #### 修改 Webpack 配置支持 AMD 加载器 由于 `monaco-editor` 默认期望有一个 AMD (Asynchronous Module Definition) 环境,因此需要调整构建工具设置以便正确加载模块。当使用 Webpack 构建应用时,可以通过配置 `resolve.alias` 字段指定编辑器的位置,并确保所有资源都能被正确解析。 另外还需要安装 `monaco-editor-webpack-plugin` 插件用于优化打包过程中的性能表现以及减少最终输出文件大小: ```javascript const path = require('path'); const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); module.exports = { resolve: { alias: { vs$: path.join(__dirname, './node_modules/monaco-editor/min/vs') } }, plugins: [ new MonacoWebpackPlugin({ languages: ['json', 'yaml'] // 只包含所需的编程语言 }) ] }; ``` 上述代码片段展示了如何修改 Webpack 设置以适应 `monaco-editor` 的需求。 #### 初始化和渲染编辑器实例 最后一步是在应用程序内部初始化 `monaco.editor.create()` 方法创建一个新的编辑区域。这里给出一段简单Vue 组件例子说明怎样实现这一点: ```html <template> <div id="container"></div> </template> <script> import * as monaco from 'monaco-editor'; export default { mounted() { const editor = monaco.editor.create(document.getElementById('container'), { value: '// 输入您的代码...', language: 'typescript' }); } } </script> <style scoped> #container { width: 80%; height: 60vh; border: 1px solid grey; } </style> ``` 此模板定义了一个容器 div 元素作为编辑区,并设置了样式使其可见;脚本部分则负责实际创建编辑对象并将之附加给 DOM 结构。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值