5

GitHub - xiaoluoboding/vue-sfc-sandbox: Vue SFC Sandbox, Sandbox as a Vue 3 comp...

 2 years ago
source link: https://github.com/xiaoluoboding/vue-sfc-sandbox
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Vue SFC Sandbox

Vue SFC Sandbox, Sandbox as a Vue 3 component.

framed_picture Preview

sparkles Features

ballot_box Sandbox

  • muscle Fully Typed
  • file_folder Virtual File System (Support Compile .vue/.js File). based on vue-sfc2esm
  • two_men_holding_hands Friendly Error Tips. based on vue-sfc2esm
  • test_tube Transpiled SFC File to ES Modules.
  • electric_plug Support Externals CDN, like unpkgjsdelivr etc.
  • jigsaw Load Import Maps as ES Modules.
  • dash Built-in Compile windicss on the fly, also support attributify mode.

pencil2 Editor Panel

  • art Themeable Editor based on Monaco Editor
  • technologist Developer Friendly, built-in Vue 3 intellisense support
  • arrow_up_down REPL Sandbox with Split Panes, Split <template> & <script> tag

eyeglasses Preview Panel

  • zap Runtime Compile SFC File
  • mag Fullscreen View
  • first_quarter_moon_with_face Darkmode

bulb Inspiration

This project is heavily inspired by Vue SFC Playground. Actually Copied from it.

package Installation

yarn add vue-sfc-sandbox -S
or
npm i vue-sfc-sandbox -S

book Usage

Notice that vue-sfc-sandbox is depending on @vue/compiler-sfc, and @vue/compiler-sfc depending on Consolidate packages. We need configure Consolidate as externals in vue.config.js or vite.config.ts file.

Demos

Vue 3 Demo: Vue CLI 3.x | Vite 2 Demo: @vitejs/app

Configure Vue 3

Add this config in vue.config.js file.

// vue.config.js in vue 3 project
module.exports = {
  ...
  configureWebpack: {
    externals: {
      consolidate: 'Consolidate'
    }
  }
  ...
}

Configure Vite 2

Add this config in vite.config.ts file.

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  define: {
    'process.env': {}
  },
  plugins: [vue()],
  optimizeDeps: {
    exclude: ['consolidate', 'velocityjs', 'dustjs-linkedin', 'atpl', 'liquor', 'twig', 'ejs', 'eco', 'jazz', 'hamljs', 'hamlet', 'jqtpl', 'whiskers', 'haml-coffee', 'hogan.js', 'templayed', 'handlebars', 'underscore', 'lodash', 'walrus', 'mustache', 'just', 'ect', 'mote', 'toffee', 'dot', 'bracket-template', 'ractive', 'htmling', 'babel-core', 'plates', 'react-dom/server', 'react', 'vash', 'slm', 'marko', 'teacup/lib/express', 'coffee-script', 'squirrelly', 'twing']
  }
})

Setup SFC Sandbox Component

// main.ts
import { createApp } from 'vue'
import App from './App.vue'

import VueSfcSandbox from 'vue-sfc-sandbox'

createApp(App)
  .use(VueSfcSandbox)
  .mount('#app')

Use SFC Sandbox Component

<template>
  <!-- [ESM] default case with <script setup> -->
  <sfc-sandbox v-bind="defaultAttrs" />
</template>

<script lang="ts">
import { defineComponent } from 'vue'

export default defineComponent({
  name: 'HelloWorld',

  setup () {
    const defaultAttrs = {
      scriptSetup: true,
      height: 200,
      sfcFilename: 'DefaultDemo.vue',
      sfcCode: `
        <template>
          <h1>{{ msg }}</h1>
        </template>

        <script setup>
        const msg = 'Hello World!'
        </script>
      `
    }

    return {
      defaultAttrs
    }
  }
})
</script>

Props

Attribute Description Type Accepted values Default height the sandbox height unit (px) Number - 400 import-maps specify a import maps in the <script> element include type=\"importmap\" String - - externals specify some cdn like jsdelivr、unpkg String - - sfc-filename virtual sfc filename like HelloWorld.vue - -

sfc-code transpile sfc code to es modules by vue-sfc2esm String - - script-setup whether script editor using <script setup> proposal Boolean true/false false

computer Development

yarn install

Compiles and hot-reloads for development

yarn serve

Compiles and minifies for production

yarn build

Lints and fixes files

yarn lint

card_file_box Similar Repos

  • vuep - ferris_wheel A component for rendering Vue components with live editor and preview.
  • codepan - Like codepen and jsbin but works offline.
  • demosify - Create a playground to show the demos of your projects.

page_facing_up License

MIT @xiaoluoboding


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK