最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue 加載遠程組件的解決方案

 更新時間:2023年07月24日 10:28:04   作者:譚光志  
最近的項目有一個加載遠程組件的需求,基于此我對 Vue 加載遠程組件的方案進行了研究,并且整理了兩個可行的解決方案,有感興趣的小伙伴跟著小編一起來看看吧

HTML 文件 + umd 組件

這個方案是最簡單、最容易實現的。組件以 umd 的格式進行打包,然后在 HTML 文件中直接使用。

<div id="app">
    <test-input></test-input>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
    // 將組件 URL 掛載到 script 標簽上,然后通過 window 獲取這個組件
    await lodaScript('http://localhost/component/input/0.1.0/bundle.js')
    app.component('TestInput', window.TestInput)
</script>

但是這個方案不適合在大型項目中使用,效率比較低。

Vue 工程項目 + esm /umd 組件

Vue 工程項目 + esm /umd 組件是我目前在使用的方案,但是在研究的過程中遇到了兩個問題,逐一解決后,才把這個方案趟通了。

第一個問題 Relative references must start with either "/", "./", or "../"

由于我們的項目不需要兼容 IE,所以打包組件采用的是 esm 格式。打包后的組件源碼如下:

import { reactive } from 'vue'
// other code...

然后在主項目中進行引用:

const { default: TestInput } = await import('http://localhost/component/input/0.1.0/bundle.mjs')

在動態(tài)導入遠程組件到項目時,提示報錯 Relative references must start with either "/", "./", or "../"。這是因為在瀏覽器中不支持以 import { reactive } from 'vue' 的方式進行導入,得把 'vue' 改成 https://..../vue.js 或者 './vue.js' 的形式才可以。平時我們這樣用沒問題是因為有 vite、webpack 等構建工具幫忙解決了這個問題。

第二個問題 Vue 上下文環(huán)境不同

產生上面的問題是因為要引入依賴,如果打包組件時把相關依賴都打在一起,那不就沒有 import 語句了。結果試了一下還是不行,因為當前的 Vue 主項目和打包好的 Vue 組件存在兩個不同的 Vue 上下文。導致在加載組件時報錯,比如提示 xxx 變量找不到 這種問題。

雖然主項目和遠程組件使用的 Vue 方法都是一樣的,但由于各自的 Vue 上下文不一樣,導致主項目無法正常使用遠程組件。

以上兩個問題困擾了我一天的時間,但是睡醒一覺后,終于想到了如何解決這兩個問題。首先在瀏覽器上不能直接使用 import { reactive } from 'vue' 這種語句,那把它改成 const { reactive } = Vue 就能解決這個問題了。至于第二個問題,打包時不把依賴打在一起,而是在 main.js 文件中直接把整個 Vue 引進來:

import * as Vue from 'vue'
window.Vue = Vue

這樣就能確保主項目和遠程組件使用的是同一個 Vue 上下文。

為了解決代碼轉換問題,我寫了一個 rollup-plugin-import-to-const 插件(支持 rollup、vite),打包 esm 組件時,它會自動的把 import { reactive } from 'vue' 轉換成 const { reactive } = Vue 。

至此,就可以在主項目中加載遠程 esm 組件了:

const { default: TestInput } = await import('http://localhost/component/input/0.1.0/bundle.mjs')

其實只要能解決上面的兩個問題,不管是 esm 還是 umd、cjs 等格式,都能夠實現加載遠程組件的方案。比如換成 umd 的格式來打包組件,就不需要引入 rollup 插件去轉換代碼了,并且還能支持 webpack。唯一要做的只是在 main.js 上把 Vue 全引進來掛到 window 下。

import * as Vue from 'vue'
window.Vue = Vue

總結

遠程組件的方案其實不止上面兩種,比如還有直接加載 .vue 文件的方案,有個現成的 vue3-sfc-loader 插件能用。 一般來說,加載遠程組件的應用場景比較少,所以網上能搜到的討論也比較少。目前比較常見的應用場景應該就是在低代碼平臺中加載遠程組件了。

以上就是Vue 加載遠程組件的解決方案的詳細內容,更多關于Vue加載遠程組件的資料請關注腳本之家其它相關文章!

相關文章

  • vue集成高德地圖amap-jsapi-loader的實現

    vue集成高德地圖amap-jsapi-loader的實現

    本文主要介紹了vue集成高德地圖amap-jsapi-loader的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • vue組件傳遞對象中實現單向綁定的示例

    vue組件傳遞對象中實現單向綁定的示例

    下面小編就為大家分享一篇vue組件傳遞對象中實現單向綁定的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Vue3?單文件中不同的組件

    Vue3?單文件中不同的組件

    在Vue?3的單文件組件(.vue?文件)中,組件可以從多個層面來理解,下面我將詳細說明哪些部分算是組件,以及如何識別它們,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • vue實現動態(tài)路由添加功能的簡單方法(無廢話版本)

    vue實現動態(tài)路由添加功能的簡單方法(無廢話版本)

    ue動態(tài)路由(約定路由),聽起來好像很玄乎的樣子,但是你要是理解了實現思路,你會發(fā)現沒有想象中的那么難,下面這篇文章主要給大家介紹了關于vue實現動態(tài)路由添加功能的簡單方法,需要的朋友可以參考下
    2023-02-02
  • Vue2集成ElementUI實現左側菜單導航功能

    Vue2集成ElementUI實現左側菜單導航功能

    本文主要記錄兩個菜單的生成方式,通過在前端router/index.js中直接進行配置,后端返回菜單數據進行對應,可以通過后端返回的菜單數據控制權限,另一種是部門靜態(tài)導航,然后再拼接動態(tài)導航,生成完成頁面導航,感興趣的朋友一起看看吧
    2025-04-04
  • vue $nextTick實現原理深入詳解

    vue $nextTick實現原理深入詳解

    這篇文章主要介紹了vue $nextTick實現原理深入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 深入了解Vue使用vue-qr生成二維碼的方法

    深入了解Vue使用vue-qr生成二維碼的方法

    這篇文章主要為大家介紹了Vue使用vue-qr生成二維碼的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 基于vue和bootstrap實現簡單留言板功能

    基于vue和bootstrap實現簡單留言板功能

    這篇文章主要為大家詳細介紹了基于vue和bootstrap實現簡單留言板功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Vue中Axios的封裝與接口管理詳解

    Vue中Axios的封裝與接口管理詳解

    在vue項目中和后臺交互獲取數據這塊,我們通常使用的是axios庫,它是基于promise的http庫,可運行在瀏覽器端和node.js中,下面這篇文章主要給大家介紹了關于Vue中Axios的封裝與接口管理的相關資料,需要的朋友可以參考下
    2022-03-03
  • vue前端實現表格數據增查改刪功能

    vue前端實現表格數據增查改刪功能

    增刪改查是我們寫項目百分之七十會遇到的代碼,下面這篇文章主要給大家介紹了關于vue前端實現表格數據增查改刪功能的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-05-05

最新評論

卫辉市| 游戏| 鸡泽县| 白河县| 左贡县| 鄂伦春自治旗| 江门市| 永兴县| 汤阴县| 昌乐县| 平昌县| 鹤山市| 文成县| 漳平市| 青岛市| 洛宁县| 赞皇县| 石楼县| 城固县| 旌德县| 桐城市| 麻阳| 荆门市| 西华县| 莱州市| 科尔| 金乡县| 蚌埠市| 凌源市| 泾川县| 天峨县| 高邑县| 阜宁县| 五指山市| 迁安市| 永泰县| 盐边县| 荥阳市| 甘泉县| 高雄市| 保定市|