Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
vue-monaco
Advanced tools
Monaco Editor is the code editor that powers VS Code, now it's available as a Vue component <MonacoEditor>
thanks to this project.
npm install vue-monaco
Or
yarn add vue-monaco
Use monaco-editor-webpack-plugin:
// webpack.config.js
const MonacoEditorPlugin = require('monaco-editor-webpack-plugin')
module.exports = {
plugins: [
new MonacoEditorPlugin({
// https://github.com/Microsoft/monaco-editor-webpack-plugin#options
// Include a subset of languages support
// Some language extensions like typescript are so huge that may impact build performance
// e.g. Build full languages support with webpack 4.0 takes over 80 seconds
// Languages are loaded on demand at runtime
languages: ['javascript', 'css', 'html', 'typescript']
})
]
}
Then use the component:
<template>
<MonacoEditor class="editor" v-model="code" language="javascript" />
</template>
<script>
import MonacoEditor from 'vue-monaco'
export default {
components: {
MonacoEditor
},
data() {
return {
code: 'const noop = () => {}'
}
}
}
</script>
<style>
.editor {
width: 600px;
height: 800px;
}
</style>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
</head>
<body>
<div id="app"></div>
<script src="monaco-editor/min/vs/loader.js"></script>
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/vue-monaco"></script>
<script>
require.config({ paths: { vs: 'monaco-editor/min/vs' } })
new Vue({
el: '#app',
template: `
<monaco-editor
style="width:800px;height:600px;border:1px solid grey"
v-model="code"
language="javascript"
:amdRequire="amdRequire"
/>`,
data: {
code: 'const noop = () => {}'
},
methods: {
amdRequire: require
}
})
</script>
</body>
</html>
When loading monaco-editor from a CDN, you need to change require.config
to look like this:
require.config({ paths: { vs: 'http://www.mycdn.com/monaco-editor/min/vs' } })
// Before loading vs/editor/editor.main, define a global MonacoEnvironment that overwrites
// the default worker url location (used when creating WebWorkers). The problem here is that
// HTML5 does not allow cross-domain web workers, so we need to proxy the instantiation of
// a web worker through a same-domain script
window.MonacoEnvironment = {
getWorkerUrl: function(workerId, label) {
return `data:text/javascript;charset=utf-8,${encodeURIComponent(`
self.MonacoEnvironment = {
baseUrl: 'http://www.mycdn.com/monaco-editor/min/'
};
importScripts('http://www.mycdn.com/monaco-editor/min/vs/base/worker/workerMain.js');`)}`
}
}
options
: The second argument of monaco.editor.create
.value
: A shortcut to set options.value
.theme
: A shortcut to set options.theme
.language
: A shortcut to set options.language
.amdRequire
: Load monaco-editor using given amd-style require function.diffEditor
: boolean
Indicate that this is a DiffEditor, false
by default.editorWillMount
monaco
: monaco module
Called before mounting the editor.
editorDidMount
editor
: IStandaloneCodeEditor
for normal editor, IStandaloneDiffEditor
for diff editor.Called when the editor is mounted.
change
Editor value is updated.
value
: New editor value.event
: The event
from onDidChangeModelContent
.You can listen to the editor events directly like this:
<template>
<MonacoEditor v-model="code" @editorDidMount="editorDidMount" />
</template>
<script>
export default {
methods: {
editorDidMount(editor) {
// Listen to `scroll` event
editor.onDidScrollChange(e => {
console.log(e)
})
}
},
data() {
return {
code: '...'
}
}
}
</script>
Refer to this page for all editor events.
getEditor(): IStandaloneCodeEditor
: Return the editor instance.Use ref
to interact with the MonacoEditor
component in order to access methods: <MonacoEditor ref="editor" />
, then this.$refs.editor.getEditor()
will be available.
Use diffEditor
prop to indicate that this is a DiffEditor, use original
prop to set the content for the original editor, use value
prop to set the content for the modified editor.
<MonacoEditor
language="javascript"
:diffEditor="true"
:value="code"
:original="originalCode"
/>
In this case, the component's getEditor()
returns the IStandaloneDiffEditor
instance, while you can use getModifiedEditor()
to get the modified editor which is an IStandaloneCodeEditor
instance.
git checkout -b my-new-feature
git commit -am 'Add some feature'
git push origin my-new-feature
vue-monaco © egoist, Released under the MIT License.
Authored and maintained by egoist with help from contributors (list).
Website · GitHub @egoist · Twitter @_egoistlily
FAQs
MonacoEditor component for Vue.js
We found that vue-monaco demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
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.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.