<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用CLI 開發(fā)一個Vue 3.0的npm 庫

          共 4485字,需瀏覽 9分鐘

           ·

          2020-12-23 13:49

          前言

          前幾天寫了一個Vue的自定義右鍵菜單的npm庫,主要講了插件的設計思路以及具體的實現(xiàn)過程,插件的開發(fā)流程沒有細講。

          本文就跟大家分享下如何使用CLI從零開始開發(fā)一個支持Vue3的庫,并上傳至npm,歡迎各位感興趣的開發(fā)者閱讀本文。

          實現(xiàn)思路

          根據(jù)Vue官方文檔中有關插件的介紹,我們開發(fā)的插件可以是公開install()方法的Object,也可以是工具類的function庫。

          本文我們要開發(fā)的庫是需要向Vue添加一個自定義指令,屬于向Vue添加全局級功能,所以需要采用公開install方法。

          庫開發(fā)完成后,就是需要打包上傳至npm庫了,打包這一塊可以選擇自己配webpack來搞,我選擇用Vue Cli提供的方案來進行打包,接下來就跟大家分享下整體的思路:

          • 安裝Vue CLI,本文安裝的是4.x版本
          • 使用vue create [project-name]命令來創(chuàng)建一個項目,創(chuàng)建時選擇自定義配置。
          • 刪除默認創(chuàng)建的文件,配置依賴項
          • 配置打包命令
          • 配置CSS內(nèi)聯(lián)
          • 添加庫描述
          • 發(fā)布至npm

          實現(xiàn)過程

          接下來帶著大家動手操作下上述步驟。

          安裝Vue CLi

          在終端執(zhí)行下述命令:

          yarn?global?add?@vue/cli
          #?或者
          npm?install?-g?@vue/cli

          創(chuàng)建項目

          在終端執(zhí)行下述命令,本文要創(chuàng)建的項目名為:vue-right-click-menu-next

          vue?create?vue-right-click-menu-next

          在接下來的步驟中,由于Vue3底層大部分代碼采用TypeScript編寫,因此他可以完美的支持TS,我們創(chuàng)建項目時就要考慮到使用我們插件的用戶啟用TS的情況,因此我們要勾上TypeScript,此處我勾選的選項為:vue3, node-sass, eslint+prettier, typescript,可以按照自己的需要去選。

          配置依賴項

          項目創(chuàng)建好后,我們刪掉CLI初始化時創(chuàng)建的東西,然后修改package.json中的內(nèi)容。

          在package.json中,CLI默認是把vuecore-js放在dependencies下的,我們開發(fā)的插件是要給其他開發(fā)者引用的,如果我們打包的產(chǎn)物中包含Vue包的話可能會引發(fā)各種問題,比如用戶可能會在引入我們的包之后會在runtime時創(chuàng)建兩個不用的Vue實例,所以vue插件的package.json里一定不能將其放在dependencies中,而是要放在peerDependencies中,表明會從引用者的其他的包中引入相對應的包,而不會在這個包里直接引入。

          • 在package.json中添加下述代碼,移除原來dependencies下的依賴。
          ?"peerDependencies":?{
          ????"core-js":?"^3.6.5",
          ????"vue":?"^3.0.0"
          ??}
          • 在devDependencies中添加git提交規(guī)范相關依賴
          {
          ????"@commitlint/cli":?"^11.0.0",
          ????"@commitlint/config-angular":?"^11.0.0",
          ????"commitizen":?"^4.2.2",
          ????"cz-conventional-changelog":?"^3.3.0",
          ????"husky":?"^4.3.0",
          }
          • 添加config和husky配置changelog生成地址和強制編輯器提交代碼走我們定義的規(guī)范
          {
          ??"config":?{
          ????"commitizen":?{
          ??????"path":?"./node_modules/cz-conventional-changelog"
          ????}
          ??},
          ??"husky":?{
          ????"hooks":?{
          ??????"commit-msg":?"commitlint?-E?HUSKY_GIT_PARAMS"
          ????}
          ??}
          }
          • 最后,在script中添加提交命令與生成changelog的命令
          {
          ????"changelog":?"conventional-changelog?-p?angular?-i?CHANGELOG.md?-s",
          ????"commit":?"git-cz"
          }

          配置打包命令

          由文檔可知,可以通過vue-cli-service build --target lib --name myLib [entry]命令,將一個單獨的入口構(gòu)建為一個庫。

          那么,我們就可以在package.json的script標簽里添加build命令用以執(zhí)行插件的打包,代碼如下。

          • vueRightMenuPlugin 打包后的文件名
          • src/main.ts 插件的入口文件
          {
          ??"build":?"vue-cli-service?build?--target?lib?--name?vueRightMenuPlugin?src/main.ts",
          }

          由于我們的插件啟用了typescript,使用它的默認打包,不會幫我們生成ts聲明文件,使用我們插件的開發(fā)者項目可能會啟用typescript,在引用插件時就會報錯聲明文件不存在,因此我們需要額外做下述操作:

          • tsconfig.jsonz中添加下述代碼,打包時在項目的指定位置自動生成配置文件。
          {
          ????"declaration":?true,//?是否生成聲明文件
          ????"declarationDir":?"dist/lib",//?聲明文件打包的位置
          }
          • 創(chuàng)建vue.config.js文件,關閉并行打包的一些相關配置。
          module.exports?=?{
          ??chainWebpack:?config?=>?{
          ????if?(process.env.NODE_ENV?===?"production")?{
          ??????config.module.rule("ts").uses.delete("cache-loader");
          ??????config.module
          ????????.rule("ts")
          ????????.use("ts-loader")
          ????????.loader("ts-loader")
          ????????.tap(opts?=>?{
          ??????????opts.transpileOnly?=?false;
          ??????????opts.happyPackMode?=?false;
          ??????????return?opts;
          ????????});
          ????}
          ??},
          ??parallel:?false
          };

          做完上述操作后,我們運行打包命令時就能自動生成聲明文件了。

          配置CSS內(nèi)聯(lián)

          當我把插件開發(fā)完,測試時發(fā)現(xiàn)我引用的組件樣式丟了,找了好久問題,最后在CLI的文檔中找到了問題所在,他有個css.extract屬性,它使用來配置打包時是否將css樣式提取到獨立的文件中,Default: 生產(chǎn)環(huán)境下是 true,開發(fā)環(huán)境下是 false,我們打包時他默認是true,用戶需要單獨引入這個樣式文件文件。

          我們可以通過手動將其設置為false,讓其在打包時使用內(nèi)聯(lián)樣式,這樣就能解決樣式失效的問題了,我們在vue.config.js中加入下述代碼。

          module.exports?=?{
          ??//?強制css內(nèi)聯(lián)
          ??css:?{?extract:?false?}
          }

          添加庫描述

          做完上述操作,我們跟打包有關的相關的配置就弄好了,接下來我們在package.json中添加庫的相關描述,讓npm可以正確識別我們的插件。

          • name 插件名稱
          • version 版本號
          • description 插件簡述
          • private 是否私有
          • main 庫的入口文件位置(打包后的入口文件)
          • types 庫的聲明文件位置
          • publisher 庫發(fā)布者
          • repository 倉庫信息
          • keywords 關鍵詞,在npm找包時所匹配的關鍵詞
          • author 庫作者
          • license 庫遵守的開源協(xié)議
          • bugs bug反饋地址
          • homepage 庫主頁
          {
          ??"name":?"vue-right-click-menu-next",
          ??"version":?"1.0.0",
          ??"description":?"支持vue3的右鍵菜單插件",
          ??"private":?false,
          ??"main":?"dist/vueRightMenuPlugin.common.js",
          ??"types":?"dist/lib/main.d.ts",
          ??"publisher":?"[email protected]",
          ??"repository":?{
          ????"type":?"git",
          ????"url":?"git+https://github.com/likaia/vue-right-click-menu-next.git"
          ??},
          ??"keywords":?[
          ????"vuejs",
          ????"vue3",
          ????"vue",
          ????"rightMenu",
          ????"右鍵菜單",
          ????"vueRightMenu"
          ??],
          ??"author":?"likaia",
          ??"license":?"MIT",
          ??"bugs":?{
          ????"url":?"https://github.com/likaia/vue-right-click-menu-next/issues"
          ??},
          ??"homepage":?"https://github.com/likaia/vue-right-click-menu-next#readme",
          }

          發(fā)布至npm

          至此,我們插件的整個環(huán)境就搭建好了,可以著手與插件的實現(xiàn)了,對本文實現(xiàn)的插件感興趣的開發(fā)者可移步至我的另一篇文章:使用vue封裝右鍵菜單插件

          插件開發(fā)完成后,我們就可以進行打包并發(fā)布至npm倉庫了。

          • 打包
          #?打包
          yarn?run?build
          • 發(fā)布
          npm?publish?--access?public

          插件發(fā)布成功:vue-right-click-menu-next

          本文中開發(fā)的插件代碼地址:vue-right-click-menu | vue-right-click-menu-next)

          在線體驗地址:chat-system


          ??看完三件事

          如果你覺得這篇內(nèi)容對你挺有啟發(fā),我想邀請你幫我三個小忙:

          1. 點贊,讓更多的人也能看到介紹內(nèi)容(收藏不點贊,都是耍流氓-_-)
          2. 關注公眾號“前端勸退師”,不定期分享原創(chuàng)知識。
          3. 也看看其他文章

          勸退師個人微信:huab119

          也可以來我的GitHub博客里拿所有文章的源文件:

          前端勸退指南:https://github.com/roger-hiro/BlogFN一起玩耍呀


          點贊、在看 支持作者??


          瀏覽 48
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品九九九九视品 | 欧美偷拍最新合集视频 | 国产精品玖玖 | 最新人妻视频 | 欧美大生殖器在线观看 |