iT邦幫忙

2024 iThome 鐵人賽

DAY 27
1
Modern Web

30天用Vitepress 開啟我的"部落客"生活系列 第 27

[Day27] - Sandbox - 即時展示沙盒

  • 分享至 

  • xImage
  •  

Banner27

鐵人賽也接近尾聲了,各位看官可以發現一個部落格大體的架構都幾乎完成了,stage 5 只是在補一些小套件來 完善一些小功能,今天就來補點 andbox(沙盒) 吧。

圖片不能對於程式邏輯的表現不夠強烈,所以有了程式碼區塊。如果想要更仔細,可以來個 Sandbox(沙盒)

vitepress sandbox

vitepress sandbox 透過 CodeSandboxonline bundler 來實現瀏覽器即時編譯的沙盒功能。

支援 static | angular | react | react-ts | vanilla | vanilla-ts | vue | vue3 | vue3-ts | svelte | solid | test-ts | vite-templates.

安裝

yarn add vitepress-plugin-sandpack -D

全域註冊

import { DefineComponent, h } from 'vue';
import { Theme, useRoute } from 'vitepress';
import DefaultTheme from 'vitepress/theme-without-fonts';
import mediumZoom from 'medium-zoom';

import { Sandbox } from 'vitepress-plugin-sandpack'; // [!code ++]
import 'vitepress-plugin-sandpack/dist/style.css'; // [!code ++]

import ExpandLayout from './layout/expandLayout.vue';
import LayoutResume from './layout/resume.vue';

function reloadBusuanzi() {......}
function initZoom() {......}

export default {
    ...DefaultTheme,
    Layout: ExpandLayout,
    setup() {......},
    enhanceApp({ app }) {
        app.component('resume', LayoutResume);
        app.component('Sandbox', Sandbox); // [!code ++]
    }
} satisfies Theme;

config markdown 配置

import path from 'node:path';
import fs from 'node:fs';
import { DefaultTheme, defineConfig } from 'vitepress';
import container from 'markdown-it-container'; // [!code ++]
import { renderSandbox } from 'vitepress-plugin-sandpack'; // [!code ++]

import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';

export default defineConfig({
  markdown: {
    config: (md) => {
      md.use(container, 'sandbox', {  // [!code ++]
          render(tokens: any[], idx: number) { // [!code ++]
              return renderSandbox(tokens, idx, 'sandbox'); // [!code ++]
          } // [!code ++]
      }); // [!code ++]
    }
  }
});

使用

normal

進階使用

我們可以將入口檔案(名為myEntry.js )改為根目錄。
MyApp.vue也在根目錄中。
將/MyApp.vue替換為/src/MyApp.vue ,它可以移動到 src 資料夾。
https://ithelp.ithome.com.tw/upload/images/20240928/20109918tbIA5NqyAB.png
https://ithelp.ithome.com.tw/upload/images/20240928/20109918XxwAnxD2rN.png

你可以看到,文件目錄是這樣的。並且 src 中的檔案將不會被使用。

小結

這樣就完成了簡單的沙盒安裝及使用,沒有什麼特別需要注意的地方,如果要說的話,應該是 VitePress Sandbox 只支援 ESM 模式。

備註

只要是和 markdown 有關係的功能,文章和實際展示效果在Opshell's Blog服用,會擁有更棒的賞文體驗。


上一篇
[Day26] - medium-zoom - 圖片縮放
下一篇
[Day28] - Shortcut Key - 快捷鍵控制
系列文
30天用Vitepress 開啟我的"部落客"生活30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言