vscode 插件開發 + vue

如果我們需要在vscode中嵌入自己開發的vue頁面就需要以下的操作

1.把開發好的vue項目打包,如果打包出來的vue執行是空白頁,就需要看看之前我寫的文章,vue 3 clie打包配置

  -這裏要注意的是,要確保vue項目裏面的public有一個index用作插件打開時的模板,等一下需要做base的特換,不然插件是不知道網頁的根目錄在哪裏

 

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title>Test</title>
    <base href="/">
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

 

    -vue.config.js的配置

const path = require('path');
function resolve (dir) {
    return path.join(__dirname, dir)
}


module.exports = {
    // 基本路徑
    publicPath: './',
    // 輸出文件目錄
    outputDir: 'dist',
    pages: {
      index: {
        entry: 'src/main.js',
        template: 'public/index.html',
        filename: 'index.html',
        chunks: ['chunk-vendors', 'chunk-common', 'index']
      }
    },
    lintOnSave:false,
    configureWebpack: {
      externals: {
      }
    },
    chainWebpack: (config)=>{
      //修改文件引入自定義路徑
      config.resolve.alias
          .set('@', resolve('src'))
          .set('~assets',resolve('src/assets'))
          // .set('ide',resolve('src/ide'))

    }
  }

 

2.把打包好的整個dist考到vscode插件裏面

  -vscode插件的命令行觸發函數裏面,需要這樣寫

const panel = vscode.window.createWebviewPanel(
                'testWebview', // viewType
                "WebView演示", // 視圖標題
                vscode.ViewColumn.One, // 顯示在編輯器的哪個部位
                {
                    enableScripts: true, // 啓用JS,默認禁用
                    retainContextWhenHidden: true, // webview被隱藏時保持狀態,避免被重置
                }
            );
            //加載本地html頁面
            let srcPath = path.join(context.extensionPath, 'dist');
            // console.log(srcPath)
            const srcPathUri = vscode.Uri.file(srcPath);
            // console.log(srcPathUri.path)
            const baseUri = panel.webview.asWebviewUri(srcPathUri);
            // console.log(baseUri)
            const indexPath = path.join(srcPath, 'index.html');
            // console.log(indexPath)
            var indexHtml = fs.readFileSync(indexPath, "utf8");


            indexHtml = indexHtml.replace('<base href=/ >', `<base href="${String(baseUri)}/">`);

            // console.log(indexHtml)
            panel.webview.html = indexHtml;

 

這樣,打開的頁面就能正確顯示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章