New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@guolao/vue-monaco-editor

Package Overview
Dependencies
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@guolao/vue-monaco-editor

Monaco Editor for Vue - use the monaco-editor in any Vue application without needing to use webpack (or rollup/vite) configuration files / plugins

  • 0.0.1
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
25K
decreased by-6.89%
Maintainers
1
Weekly downloads
 
Created
Source

monaco-vue gitHub license npm version

Vue 中使用从 CDN 加载的 monaco-editor,不需要在 webpack (or rollup, vite) 等打包工具中配置插件。

如果你想以 NPM Package 的形式使用 monaco-editor,并从 node_modules 中加载 monaco-editor 文件打包到你的代码中,则仍需要使用打包工具的插件,具体可查看此处

Installation

# npm
npm i @guolao/vue-monaco-editor

# yarn
yarn add @guolao/vue-monaco-editor

# pnpm
pnpm add @guolao/vue-monaco-editor

当然,你也可以使用 CDN-unpkg

Usage

Editor Component

引入 Editor 组件使用即可。

import { defineComponent } from 'vue'
import Editor from '@guolao/vue-monaco-editor'

export default defineComponent(() => {
  return (
    <Editor 
      height="80vh"
      theme='vs-dark'
      defaultLanguage="javascript"
      defaultValue="// some comment"
      onChange={(val, event) => console.log(val, event)}
    />
  )
})

editor instance

编辑器实例可以通过 onMount 事件获取。

import { defineComponent, ref } from 'vue'
import Editor from '@guolao/vue-monaco-editor'

export default defineComponent(() => {
  const editorRef = ref()

  function handleEditorMount(editor) {
    // 在这里获取 editor instance
    editorRef.value = editor
  }

  return (
    <Editor 
      height="80vh"
      theme='vs-dark'
      defaultLanguage="javascript"
      defaultValue="// some comment"
      onMount={handleEditorMount}
    />
  )
})

monaco instance

onBeforeMount & onMount 事件

monaco-editor 实例可以通过 onBeforeMount or onMount 事件获取。

import { defineComponent, ref } from 'vue'
import Editor from '@guolao/vue-monaco-editor'

export default defineComponent(() => {
  const monacoRef = ref()

  function handleMonacoBeforeMount(monaco) {
    // 在这里获取 monaco instance
    monacoRef.value = editor
  }

  function handleMonacoMount(editor, monaco) {
    // 在这里获取 monaco instance
    monacoRef.value = editor
  }

  return (
    <Editor 
      height="80vh"
      theme='vs-dark'
      defaultLanguage="javascript"
      defaultValue="// some comment"
      onBeforeMount={handleMonacoBeforeMount}
      onMount={handleEditorMount}
    />
  )
})
useMonaco hook

vue-monaco-editor 提供了 useMonaco 来加载 monaco-editor

useMonaco 是使用 @monaco-editor/loader 从 CDN 加载 monaco-editor 文件。

需要注意的是 useMonaco 仅加载并导出 monaco 实例,仍需要配合 Editor 组件一起使用,或者你可以使用 monaco 实例手动创建编辑器实例。

import { defineComponent, onUnmounted } from 'vue'
import Editor, { useMonaco } from '@guolao/vue-monaco-editor'

export default defineComponent(() => {
  const { monacoRef, unload } = useMonaco()
  
  // 组件卸载时,
  // monaco instance 没有加载成功的话,
  // 需要手动取消加载。
  onUnmounted(() => !monacoRef.value && unload())

  return (
    <Editor 
      height="80vh"
      theme='vs-dark'
      defaultLanguage="javascript"
      defaultValue="// some comment"
    />
  )
})
loader 加载

可以直接使用 @monaco-editor/loader 从 CDN 加载 monaco instanceloader 的加载过程为异步加载,且只会执行一次加载。

@monaco-editor/loader 的相关配置可以直接点击链接查看。

import { loader } from "@guolao/vue-monaco-editor"

// CDN 加载
loader.config({ 
  paths: { 
    vs: 'https://cdn.jsdelivr.net/npm/monaco-editor@0.33.0/min/vs' 
  },
})

//  可以配置语言
loader.config({ "vs/nls": { availableLanguages: { "*": "de" } } })

// or
loader.config({
  paths: {
    vs: "...",
  },
  "vs/nls" : {
    availableLanguages: {
      "*": "de",
    },
  },
})

CDN

vue-monaco-editor 基于 @monaco-editor/loader 从 CDN 加载文件,默认 CDN 为 jsdelivr

loader.config({ 
  paths: { 
    vs: 'https://cdn.jsdelivr.net/npm/monaco-editor@0.33.0/min/vs' 
  },
})

如果你有其他需求,可以通过修改配置从其他地方加载 monaco-editor 相关文件。

具体配置请查看 @monaco-editor/loader

NPM Package

如果你想以 NPM Package 的形式使用 monaco-editor,从 node_modules 中加载 monaco-editor 文件并打包到你的代码中,则仍需要使用打包工具的插件。

import * as monaco from "monaco-editor"
import { loader } from "@guolao/vue-monaco-editor"

// 配置从 `node_modules` 中加载 monaco-editor
loader.config({ monaco })

Vite

如果使用 vite,你需要这样做(具体可查看 #1791 (comment)):

import { loader } from "@guolao/vue-monaco-editor"

import * as monaco from "monaco-editor"
import editorWorker from "monaco-editor/esm/vs/editor/editor.worker?worker"
import jsonWorker from "monaco-editor/esm/vs/language/json/json.worker?worker"
import cssWorker from "monaco-editor/esm/vs/language/css/css.worker?worker"
import htmlWorker from "monaco-editor/esm/vs/language/html/html.worker?worker"
import tsWorker from "monaco-editor/esm/vs/language/typescript/ts.worker?worker"

self.MonacoEnvironment = {
  getWorker(_, label) {
    if (label === "json") {
      return new jsonWorker()
    }
    if (label === "css" || label === "scss" || label === "less") {
      return new cssWorker()
    }
    if (label === "html" || label === "handlebars" || label === "razor") {
      return new htmlWorker()
    }
    if (label === "typescript" || label === "javascript") {
      return new tsWorker()
    }
    return new editorWorker()
  }
}

loader.config({ monaco })

Rollup

如果使用 Rollup,你可以使用社区提供的插件 rollup-plugin-monaco-editor

Webpack

如果使用 webpackmonaco-editor 官方提供了 webpack 的插件 monaco-editor-webpack-plugin,你可以安装并使用它。

Props & Events & slots

Editor

NameTypeDefaultDescriptionremark
defaultValuestring当前编辑器模型的默认值
defaultLanguagestring当前编辑器模型的默认语言monaco-editor 支持的语言查看此处
defaultPathstring当前编辑器模型的默认路径monaco.editor.createModel(..., ..., monaco.Uri.parse(defaultPath))
valuestring当前编辑器模型的值v-model:value
languagestring当前编辑器模型的语言monaco-editor 支持的语言查看此处
pathstring当前编辑器的路径
themelight | vs-darklightmonaco-editor 的主题monaco.editor.defineTheme(...)
linenumber可以设置要跳到行数
optionsobject{}IStandaloneEditorConstructionOptions
overrideServicesobject{}IEditorOverrideServices
saveViewStatebooleantrue编辑器模型变更后,保存模型的视图状态(滚动位置等)需要给每个模型配置唯一 path
widthnumber | string100%容器宽度
heightnumber | string100%容器高度
classNamestring容器 class
onUpdate:value(value: string | undefined) => void编辑改变值后执行可直接使用 v-model
onBeforeMount(monaco: Monaco) => void编辑器实例创建前执行
onMount(editor: monaco.editor.IStandaloneCodeEditor, monaco: Monaco) => void编辑器实例创建后执行
onChange(value: string | undefined) => void编辑改变值后执行monaco.editor.IModelContentChangedEvent) => void
onValidate(markers: monaco.editor.IMarker[]) => void当语法发生错误时执行monaco-editor 支持语法校验的语言查看此处
#defalutslot'loading...'加载状态从 CDN 加载文件需要一段时间,显示加载状态更为友好

License

MIT

Keywords

FAQs

Package last updated on 20 May 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc