Vuejs 使用 lib 庫模式打包 umd 解決 NPM 包發佈的問題

来源:https://www.cnblogs.com/evenyao/archive/2019/01/02/10208155.html
-Advertisement-
Play Games

由於升級了 v0.2 版 GearCase 使用打包工具從 parcel 更換成 vue-cli 3.x。因此打包後發佈 NPM 包的方式與之前有很大的差異,這也導致了在發佈完 GearCase v0.2.2 版本之後,我自己在進行 NPM / Yarn 安裝包時。根本無法通過之前文檔的方式,進行引 ...


由於升級了 v0.2 版 GearCase 使用打包工具從 parcel 更換成 vue-cli 3.x。因此打包後發佈 NPM 包的方式與之前有很大的差異,這也導致了在發佈完 GearCase v0.2.2 版本之後,我自己在進行 NPM / Yarn 安裝包時。根本無法通過之前文檔的方式,進行引入並註冊組件。後來我大概花費了兩天的時間來解決這個問題。

回顧

由於 parcel 的打包方式與 webpack 有很大的差異。並且當時還處於輪子庫 v0.1 版本,引入/註冊組件的方式也有不同。

詳情參照之前的博文Parcel 打包器簡單使用記錄

 

解決過程

打包方式

首先要解決是打包方式異同的問題。一開始我還是以前的思路,使用普通的 npm run build / yarn build 方式進行打包,完成之後生成了一系列文件。如下圖結構。

可以查看到的是,JS 文件目錄之下,有兩個 JS 文件,通過之前的方式。我將這兩個 JS 文件都放置到 dist目錄之下,並取名為 index.js。然後在項目的 package.json 文件中添加 "main": "dist/index.js", 後再次使用 npm bulish 上傳 NPM 包,仍舊無法按照之前文檔所寫方式(舊方式)正常引入/註冊/使用我所構建的輪子組件。

隨後在 vue cli 的官方文檔中,我找到了打包庫模式的方法。詳細文檔參考vue-cli 構建目標庫方法



按照文檔中的方法,依舊創建在 src 目錄下創建入口文件 index.js。然後通過文檔中的命令 "vue-cli-service build --target lib --name GearCase src/index.js" 進行庫方式的打包,最後生成了四個文件。目錄如下:

再查看 GearCase.umd.js 這個文件內容之後,發現這個 JS 文件就是我們所需要的(因為他是 umd 的統一模塊定義方法,可以相容所有的模塊化方式),並且相對於之前的方式,這個 JS 文件可以使用於任意環境。

什麼是 umd ?

commonJSrequireJS 都是用來處理JS模塊化的,其中 commonJS 用來給 nodejs 使用(使用了 module.exports 的用法)。後來使用 import/export 來導出/引入模塊。umd 是統一模塊定義方法,可以相容所有其他的模塊定義方法。

 

重新導出

接下來我們把所有的組件導出,並用 ES6 的簡介書寫方式使用一行代碼完成導入導出,如下圖所示。

然後再使用 "vue-cli-service build --target lib --name GearCase src/index.js" 進行庫方式打包,會發現生成的 umd.js 文件容量變大了。

一開始查看 umd.js 文件代碼之後以為是打包過程中將 Vue 引入組件的緣故,繼而導致了代碼超過了 200k。於是思考排除 Vuejs 參與打包的方法。

 

解決代碼體積

後來查看文檔之後,發現文檔中特意說明瞭。預設情況下,是不會讓 Vue 參與打包的。

註意對 Vue 的依賴
在庫模式中,Vue 是外置的。這意味著包中不會有 Vue,即便你在代碼中導入了 Vue。如果這個庫會通過一個打包器使用,它將嘗試通過打包器以依賴的方式載入 Vue;否則就會回退到一個全局的 Vue 變數。

 

發佈

更改 name

由於之前使用 GearCase,但大寫的文件名可能導致一些問題,所以修改為 gearcase

更改入口文件

將之前 package.json 的 "main": "dist/index.js", 入口文件修改為 "main": "dist/gearcase.umd.min.js",

簡化命令

在 package.json 中添加 script 快捷語法,將 "vue-cli-service build --target lib --name gearcase src/index.js" 命令簡化為 package-go

然後使用以下命令重新打包。並生成我們最終需要的文件

yarn package-go

 

註意這裡的 gearcase 已經在新的版本中更換為了 gear-case

發佈 NPM 包

使用 npm publish 發佈 NPM 包到線上。

後續

經過以上操作。成功解決了 parcel 更換 vue-cli 3.x 之後打包生成文件上傳到 NPM 無法引入的問題。

截止到該問題解決 GearCase 版本已經升級到 v0.2.14,新的文檔正在更新中… 詳細更改說明請查閱文檔


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.var reg=/./ var reg=/\./ 前者代表任何一個字元,後者代表這個字元中得有一個 2.?的使用 如果單獨一個字元後面帶? var reg=/\d?/ /n?/ 代表一個或0個字元的出現 如果是量詞+和*,{2,}後面帶?取消正則的貪婪性 在捕獲階段 3.捕獲 1.普通捕獲 ex ...
  • (註:此文是在看過許多學習資料和視頻之後,加上自身理解拼湊而成,僅作學習之用。若有版權問題,麻煩及時聯繫) 標準頁面結構: Html發展歷史: 註:每一種HTML需要有對應的doctype聲明。 H5 <!doctype html> 無文檔聲明瀏覽器以怪異模式解析html Html標簽: 不使用ht ...
  • (1)盒模型(普通盒模型、怪異盒模型) 1、元素的content(內容)、padding(內邊距)、border(邊框)、margin(外邊距)構成了CSS盒模型 2、IE盒模型和W3C盒模型 1)IE盒模型是怪異模式下的盒模型,W3C盒模型是標準模式下的盒模型; 2)IE盒模型的width/hei ...
  • (1)Vue的生命周期 1)創建vue實例,初始化生命周期鉤子函數 2)數據檢測及方法和計算屬性代理。在數據檢測和初始化數據之前調用beforeCreated(),這時還獲取不到props或者data中的數據;數據、屬性、方法初始化之後,調用created(),可以訪問之前訪問不到的數據,但是組件還 ...
  • function getBrowserInfo() { var ua = navigator.userAgent.toLocaleLowerCase(); var browserType = null; if (ua.match(/msie/) != null || ua.match(/triden... ...
  • 最近項目不太忙,有時間系統學習了一下rxjs的一些知識,將其中個人認為比較常用的一些操作符mark下來,分享學習 ...
  • 瀏覽器中的JavaScript: 1.基於ECMAscript規範,這個規範規定了語法 2.添加了dom:用來處理文檔 document object model 3.添加了BOM:用於操作瀏覽器 window location histrory navigator Node中的JavaScript ...
  • 身為一個前端攻城獅,是不是經常遇到各種各樣的響應式問題?下麵我們來說一下: 1.響應式跟自適應有什麼區別? 有些人可能還不知道響應式跟自適應的區別,甚至認為他們是同一個東西,其實不是的. 自適應是最早出現的,後面才有了響應式。響應式佈局等於流動網格佈局,而自適應佈局等於使用固定分割點來進行佈局。 如 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...