精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用Svelte來構建Web Component(超簡單方便)

OSC開源社區 ? 來源:OSCHINA 社區 ? 作者:紅薯 ? 2022-12-19 11:39 ? 次閱讀

每個開發人員都應該關注代碼中的可重用性以及代碼的業務隔離,這樣可以讓業務邏輯與應用架構分離,提升系統的擴展性。而 Web Component 就是這樣一個技術,可以讓我們創建一個獨立的可重用組件。

本文將介紹使用 Svelte 創建通用的 Web Component 的完成過程。『通用』指的是該組件不局限于 Svelte 應用,還可以用于任何 JavaScript 應用程序(如 Vue、React 等),同時還將介紹使用 Svelte 創建 Web Component 的一些局限性。

什么是 Web Component?

Web Component 可以讓我們創建可重用的、自定義的封裝了樣式以及功能的 HTML 元素。

例如,我們使用如下代碼來創建一個導航條:



 

如果用 Web Component 技術,我們可以定義一個自定義元素(如 ),然后你可以在網頁任一地方使用該元素顯示導航條,同時這個導航條的樣式和頁面其他元素的樣式是完全隔離的,不會相互影響。而這項技術被稱之為 Shadow DOM (影子 DOM)。

什么是 Shadow DOM?

Shadow DOM 是一個較小的、獨立的 DOM,它與主 DOM 分開渲染,允許我們將樣式和標記行為隔離到單個組件中。Shadow DOM 本質上允許我們將組件功能進行封裝和隔離,我們可以單獨對其設置樣式、編寫功能腳本,而不會干擾應用程序的其余元素。
你大概對 Web Component 有一個基本的認識,下面我們開始用 Svelte 來編寫一個簡單的組件。

構建 Web Component

準備工作

為了完成本文剩余的內容學習,需要你對掌握以下知識:

對 HTML, CSS 和 JavaScript 有基本的認識

熟悉命令行操作環境

需要一個文本編輯器

最好對 Svelte 有一些基本的了解(可以看看我之前翻譯的文章https://my.oschina.net/javayou/blog/5309554)

開始

本文我們將開發兩個組件:

第一個組件是一個卡片組件,接收三個屬性分別是:卡片標題、卡片描述以及圖片,該組件名為

第二個組件是一個帶樣式的按鈕,接收一個type的屬性,通過該屬性來確定按鈕的顯示樣式,組件名稱為

同時我們將使用兩種組件的發布方式,一個是打包到單一文件,另外一個是每個組件發布到一個獨立的文件中。

下圖顯示的是兩個組件運行后的外觀:
ad515cfe-7df7-11ed-8abf-dac502259ad0.png
我們從創建一個 Svelte 應用開始,并安裝必須的包:

npx degit sveltejs/template web-component-tut
cd web-component-tut
npm install


上述命令執行完畢就可以使用如下命令啟動一個測試環境:

npm run dev

然后我們打開瀏覽器訪問http://localhost:8080就可以看到一個最基礎的 Svelte 應用運行起來后的樣子:
ad73f21e-7df7-11ed-8abf-dac502259ad0.png

開發一個組件

使用 Svelte 生成通用 Web Component 的過程類似于創建常規 Svelte 組件的過程,只是進行了一些修改。

為了創建第一個卡片組件,我們首先創建一個文件src/Card.svelte并定義組件的屬性、樣式以及 HTML 標簽,代碼如下:



{card_title}

{card_desc}

你可以在其他組件中使用這個卡片組件,如下所示(這一步可忽略):



接下來是按鈕組件,文件名/src/Button.svelte代碼如下:



  


該組件的使用方法如下(可忽略):

importButtonfrom"./Button.svelte";

Click me

將自定義組件轉成通用組件

我們需要將自定義 Svelte 組件轉成通用的 Web Component ,這樣才可以在其他框架中直接使用。

要做這個轉換操作,我們需要在 Svelte 配置文件中設置讓編譯器生成自定義元素。打開rollup.config.js在 plugins 增加一個compilerOptions配置項,在該配置項下增加customElement: true配置信息,如下所示:

...
 plugins:[
    svelte({
      compilerOptions:{
        dev:!production,
        customElement:true,
...
然后我們需要給兩個組件分別定義一個元素名稱,打開Card.svelte文件,在文件開頭第一行插入如下內容:
上述tag屬性值代表組件的標簽名稱。

同樣的,打開 Button.svelte 給第二個組件指定一個標簽名稱:
最后一步是在main.js中引入這兩個組件,打開/src/main.js將里面的內容替換成如下兩行:
importButtonfrom"./Button.svelte";
importCardfrom"./Card.svelte";

這里我們已經完成了兩個組件的開發步驟,下一步就是打包組件以便其他的應用可以使用這兩個組件,打開命令行窗口進入項目所在目錄執行如下命令:

npm run build

該命令將生成兩個文件,分別是build.js和build.map.js, 文件位于項目下的/build目錄。其中build.js是打包的兩個組件,而build.map.js是build.js源代碼映射文件。

如果上述步驟順利完成,我們就可以將bundle.js拷貝到一個新目錄,然后創建一個index.html文件,內容如下:


  
    My website
    
  

  
    
      
        
          
          
           
        
        
          
             Solid Cool Button 
             Outlined Cool Button 
          
        
      
    
  

這是一個再簡單不過的 HTML 頁面了,該頁面使用了上述兩個組件,在瀏覽器中顯示為如下效果:

ad903c9e-7df7-11ed-8abf-dac502259ad0.png

組件分割

在某些情況下我們不需要將多個組件打包到同一個 js 文件中,我們希望每個組件有一個獨立的 js 文件。要實現這個場景只需在rollup.config.js的input 和 output 中進行配置即可。

在 input 的配置中我們可以指定一個數組,數組的元素就是每個組件的文件路徑,而 output 指定為輸出的目錄即可:

exportdefault{
  input:["src/Card.svelte","./src/Button.svelte"],
  output:{
    format:"iife",
    dir:"public/build/",
  },
...
修改完成后再次執行npm run build,我們就可以在 build 目錄中看到兩個文件Button.js和Card.js。
使用方法類似:

Click Me

 

主要缺點

到這里我們已經掌握了使用 Svelte 開發 Web Component 的方法,這個過程非常之簡單,但是,使用 Svelte 開發 Web 組件會有一些缺點如下:

組件的屬性名稱不允許使用駝峰命名法,例如你會發現使用形如 cardTitle 這樣的屬性名就無法正常工作,而駝峰命名法又是 JavaScript 推薦的命名風格。這是一個 Bug,不過如果你使用的是 Vite ,那么有一個workaround plugin可以解決這個問題。

如果不標記 Web 組件,就無法在 Svelte 中重用它們 - 不幸的是,您還必須標記要在自定義 Web 組件中使用的每個 Svelte 組件

加入你有一個Header.svelte文件需要作為組件輸出,但同時這個組件又依賴另外一個Nav.svelte文件,而 Nav.svelte 我們不希望作為 Web 組件輸出,這個問題使得我們必須將 Nav.svelte 也作為組件輸出,否則程序就會報錯。好在這個問題現在也有解了(詳情請看https://github.com/svelte-society/recipes-mvp/issues/41#issue-638005462),我們可以通過配置來解決這個問題,雖然看起來不是那么的爽,就這樣吧,又不是不能用。

瀏覽器的支持問題 — JavaScriptcustomElementAPI 就是用來創建 Web Component 的底層 API,該 API 目前并沒有被所有的瀏覽器支持,我們需要引入 Polyfill 來解決這個文件,詳情請看https://github.com/webcomponents/polyfills/tree/master/packages/custom-elements。

總結

在本文中,我們學習了如何使用 Svelte 創建通用卡片和按鈕組件,生成捆綁文件,拆分它們,甚至在單獨的 HTML 頁面中重用此組件。

動手試試吧?

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴

原文標題:使用Svelte來構建Web Component (超簡單方便)

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    簡單方便的電話視免打擾電路設計

    簡單方便的電話視免打擾電路設計筆者利用家中壞電熱毯的調溫開關改制了一電話機免打擾電路,其結構簡單,改制容易,現將改制方法介紹如下。 [hide][/hide]
    發表于 12-17 10:48

    使用MAXI接口的最簡單方法是什么?

    到當前SAXI的MAXI接口創建一個新的axi_lite組件,然后通過新組件處理外部請求。如果是這樣,開始使用MAXI接口的最簡單方法是什么?以上來自于谷歌翻譯以下為原文I have an XADC
    發表于 11-02 11:32

    將新庫添加到Petalinux rootfs的最簡單方法是什么

    嗨,將新庫添加到Petalinux rootfs的最簡單方法是什么?1>如何將預編譯的庫添加到rootfs,這將在petalinux-config -c rootfs中檢測到2>如何將源代碼添加到petalinux并在rootfs配置中進行構建和編譯。
    發表于 05-22 08:32

    通過Keil5實現簡單移植的方法

    無意中發現的一個通過Keil5實現簡單移植的方法,真的非常簡單方便,再也不用手動拖文件了,甚至還有專門的rtos調試工具可以用。
    發表于 11-30 08:03

    ADC701簡單方塊圖

    ADC701簡單方塊圖
    發表于 06-27 15:49 ?565次閱讀
    ADC701<b class='flag-5'>簡單方</b>塊圖

    簡單方便lockdir_文件加密軟件

    電子發燒友網站提供《簡單方便lockdir_文件加密軟件.exe》資料免費下載
    發表于 08-26 20:21 ?1次下載

    FLIR手機熱像儀體驗:簡單方便 小巧易用

    這款FLIR ONE PRO熱像儀可以算得上是一款家中日常必備的小工具, 它簡單方便、小巧易用,能夠實現大多數熱像儀的功能。它可以說是跟激光尺、螺絲刀一樣,雖然不常用,但是在用的時候卻是能夠幫大忙
    發表于 12-24 09:42 ?2476次閱讀
    FLIR手機熱像儀體驗:<b class='flag-5'>簡單方便</b> 小巧易用

    測試IGBT的簡單方

    一些測試IGBT的簡單方
    的頭像 發表于 06-19 10:19 ?1.5w次閱讀

    多功能醫療臺車給人帶來舒適感,操作簡單方便

    多功能醫療臺車設計以功能為主體,通過人機分析研究充分考慮體積與功能的關系,采用可折疊式結構和易維護的結構,整體簡單大氣,顏色搭配造型都體現了專業度,給人帶來舒適感,操作簡單方便。 考慮到醫療產品的特殊性,醫
    發表于 05-17 15:11 ?858次閱讀

    一種簡單的FreeRTOS移植方法——2021.03

    無意中發現的一個通過Keil5實現簡單移植的方法,真的非常簡單方便,再也不用手動拖文件了,甚至還有專門的rtos調試工具可以用。
    發表于 11-21 19:06 ?10次下載
    一種<b class='flag-5'>超</b><b class='flag-5'>簡單</b>的FreeRTOS移植方法——2021.03

    svelte-intellij Svelte的IDEA插件

    ./oschina_soft/svelte-intellij.zip
    發表于 05-18 14:25 ?1次下載
    <b class='flag-5'>svelte</b>-intellij <b class='flag-5'>Svelte</b>的IDEA插件

    使用Bolt構建鬧鐘的最簡單方

    電子發燒友網站提供《使用Bolt構建鬧鐘的最簡單方法.zip》資料免費下載
    發表于 12-09 16:17 ?0次下載
    使用Bolt<b class='flag-5'>構建</b>鬧鐘的最<b class='flag-5'>簡單方</b>法

    使用蜂鳴器創建警報的最簡單方

    電子發燒友網站提供《使用蜂鳴器創建警報的最簡單方法.zip》資料免費下載
    發表于 12-15 11:05 ?0次下載
    使用蜂鳴器創建警報的最<b class='flag-5'>簡單方</b>法

    前端框架Svelte放棄TypeScript,JS贏!

    負責 Svelte 編譯器的開發者則說道,改用 JSDoc 后,代碼不需要編譯構建即可進行調試 —— 簡化了編譯器的開發工作。畢竟目前的調試工作比較復雜,需要使用構建步驟進行調試。
    的頭像 發表于 05-11 10:39 ?1241次閱讀
    前端框架<b class='flag-5'>Svelte</b>放棄TypeScript,JS贏!

    前端UI框架Svelte 4正式發布

    的支持,這就需要發布一個 CJS 構建,一旦 eslint 重寫完成,Svelte 的軟件包大小可以再下降 50% 以上。
    的頭像 發表于 06-25 15:44 ?577次閱讀
    前端UI框架<b class='flag-5'>Svelte</b> 4正式發布