<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>

          如何搭建和發(fā)布一個(gè) Vue 組件庫(kù)

          共 6208字,需瀏覽 13分鐘

           ·

          2021-03-20 12:36


          如今,許多組件庫(kù)風(fēng)靡一時(shí),使得我們能夠便捷地保持一個(gè)應(yīng)用一致的外觀和體驗(yàn)。

          我至今已經(jīng)使用過(guò)許多不同的組件庫(kù),不過(guò)使用組件和深入了解構(gòu)建組件的過(guò)程還是有很大不同的。

          我想要更深入地理解組件庫(kù)的構(gòu)建過(guò)程,也希望能有助于你對(duì)于這一過(guò)程的理解。

          我們接下來(lái)會(huì)使用  vue-sfc-rollup  這個(gè) npm 包來(lái)構(gòu)建這個(gè)組件庫(kù),這是一個(gè)非常實(shí)用的組件庫(kù)構(gòu)建工具。

          如果想用這個(gè)工具管理現(xiàn)有的組件庫(kù),可以查看文檔

          這個(gè)工具為我們創(chuàng)建了項(xiàng)目的文件結(jié)構(gòu),如文檔所說(shuō),它創(chuàng)建了以下文件(SFC 即 Single File Component):

          • 一個(gè)最簡(jiǎn)的  rollup  配置文件
          • 一個(gè)包含 build/dev 腳本和項(xiàng)目依賴的 package.json 文件
          • 一個(gè)最簡(jiǎn)的用于轉(zhuǎn)譯的 babel.config.js 和 .browserslistrc 文件
          • rollup 打包 SFC 時(shí)用到的包裝器(wrapper)
          • 一個(gè) SFC 示例文件
          • 組件庫(kù)的使用示例

          這個(gè)工具同時(shí)支持單文件組件和組件庫(kù),注意文檔中的這句話:

          在 library 模式下有一個(gè) 'index' 文件,其中聲明了需要暴露哪些組件到你的庫(kù)中。

          也就是說(shuō),在設(shè)置過(guò)程中會(huì)額外生成一些文件。

          開(kāi)始構(gòu)建

          首先,全局安裝  vue-sfc-rollup

          npm install -g vue-sfc-rollup


          安裝完成后,在命令行窗口進(jìn)入想要在其中保存項(xiàng)目文件的目錄,執(zhí)行如下命令來(lái)初始化項(xiàng)目。

          sfc-init


          在提示中選擇如下選項(xiàng):

          • Is this a single component or a library?  Library
          • What is the npm name of your library?  (名稱(chēng)在 npm 中必須是唯一的,這里我使用的是  brian-component-lib
          • Will this library be written in JavaScript or TypeScript?  JavaScript(可以放心地選擇 TypeScript,只要你清楚自己的選擇)
          • Enter a location to save the library files:  (項(xiàng)目的文件夾名稱(chēng),默認(rèn)為之前步驟設(shè)置的 npm 名稱(chēng),所以可以直接按 enter 取默認(rèn)值。)

          設(shè)置完成之后,進(jìn)入項(xiàng)目目錄并執(zhí)行 npm install。

          cd path/to/my-component-or-lib

          npm install


          完成之后,選擇一個(gè)編輯器來(lái)打開(kāi)項(xiàng)目目錄。

          如上所述,在  /src/lib-components  文件夾中可以看到,一個(gè)示例 Vue 組件已經(jīng)為我們構(gòu)建好了。要查看效果,可以運(yùn)行  npm run serve  命令,然后在瀏覽器中訪問(wèn)  http://localhost:8080/。

          開(kāi)始添加我們的自定義組件。在這個(gè)示例中,我打算模擬 freeCodeCamp 的任務(wù)介紹部分的按鈕,所以在  lib-components  文件夾中新建一個(gè)名為  FccButton.vue  的 Vue 文件。

          這就是我們將要構(gòu)建的按鈕

          可以直接將下面這段代碼復(fù)制到你的文件中:

          <template>
            <button class="btn-cta">{{ text }}</button>
          </template>

          <script>
          export default {
            name: "FccButton", // vue component name
            props: {
              text: {
                type: String,
                default: "Enter Button Text Here"
              }
            },
            data() {}
          };
          </
          script>

          <style>
          .btn-cta {
            background-color#d0d0d5;
            border-width3px;
            border-color#1b1b32;
            border-radius0;
            border-style: solid;
            color#1b1b32;
            display: block;
            margin-bottom0;
            font-weight: normal;
            text-align: center;
            -ms-touch-action: manipulation;
            touch-action: manipulation;
            cursor: pointer;
            white-space: nowrap;
            padding6px 12px;
            font-size18px;
            line-height1.42857143;
          }

          .btn-cta:active:hover,
          .btn-cta:focus,
          .btn-cta:hover {
            background-color#1b1b32;
            border-width3px;
            border-color#000;
            background-image: none;
            color#f5f6f7;
          }
          </style>

          src/lib-components/FccButton.vue

          可以看到,在代碼段的最上方部分是頁(yè)面元素的模板:一個(gè)按鈕,其 class 為 "btn-cta",其文本內(nèi)容為我們傳遞給它的變量 text 的值。

          在 script 標(biāo)簽中,定義了組件名稱(chēng)及組件將要接收的屬性(props),這個(gè)示例組件只接收一個(gè)默認(rèn)值為 "Run the Tests" 的名為  text  的屬性。

          我們還定義了一些樣式,以使這個(gè)按鈕呈現(xiàn)出我們想要的外觀。

          為了查看這個(gè)組件的效果,需要將它添加到  lib-components  路徑下的  index.js  文件中。index.js 文件內(nèi)容如下:

          /* eslint-disable import/prefer-default-export */
          export { default as FccButton } from './FccButton';

          src/lib-components/index.js

          還需要在  dev  路徑下的  serve.vue  文件中導(dǎo)入這個(gè)組件,代碼如下:

          <script>
          import Vue from "vue";
          import { FccButton } from "@/entry";

          export default Vue.extend({
            name"ServeDev",
            components: {
              FccButton
            }
          });
          </script>

          <template>
            <div id="app">
              <FccButton />
            </div>

          </template>

          /dev/serve.vue

          再次執(zhí)行  npm run serve  命令,在瀏覽器中訪問(wèn)  http://localhost:8080/  地址即可查看這個(gè)按鈕組件的最終效果。

          現(xiàn)在已經(jīng)構(gòu)建出我們想要的組件。之后可以參照這些步驟來(lái)構(gòu)建自己的組件,切記要在  /lib-components/index.js  文件中將其導(dǎo)出,以確保在我們后續(xù)發(fā)布的 npm 包中這些組件是可用的。

          發(fā)布到 NPM

          現(xiàn)在,組件庫(kù)發(fā)布前的準(zhǔn)備工作已經(jīng)完成,我們需要執(zhí)行構(gòu)建過(guò)程來(lái)將其打包。

          由于這是我們組件庫(kù)的第一次發(fā)布,建議在執(zhí)行 build 命令之前在  package.json  文件中將版本號(hào)設(shè)置為  0.0.1。我們將會(huì)在發(fā)布第一個(gè)正式版本之前加入更多組件。想要了解更多關(guān)于語(yǔ)義化版本的信息,查看這里

          執(zhí)行  npm run build

          如文檔所述:

          執(zhí)行 build 腳本將會(huì)在  dist  路徑中生成 3 個(gè)編譯后的文件,文件名和路徑由 package.json 文件中的  mainmoduleunpkg  屬性指定。這些文件生成之后,可以進(jìn)行下一步。

          命令執(zhí)行完畢之后,我們已經(jīng)準(zhǔn)備好將組件庫(kù)發(fā)布到 NPM 了。在此之前,確保你有一個(gè) NPM 賬號(hào)(沒(méi)有的話,可以點(diǎn)擊這里進(jìn)行注冊(cè))。

          接下來(lái)將你的 NPM 賬戶添加到終端(terminal):

          npm adduser

          理解 package.json

          我們使用 package.json 文件來(lái)控制要將哪些文件發(fā)布到 npm。初始化項(xiàng)目時(shí)生成的  package.json  文件內(nèi)容如下:

          "main""dist/brian-component-lib.ssr.js",
          "browser""dist/brian-component-lib.esm.js",
          "module""dist/brian-component-lib.esm.js",
          "unpkg""dist/brian-component-lib.min.js",
          "files": [
              "dist/*",
              "src/**/*.vue"
          ],

          files  屬性中的配置指定 npm 將  dist  文件夾中所有內(nèi)容及  src  文件夾下所有  .vue  文件發(fā)布。你可以根據(jù)需要更新配置,在本次教程中我們讓它保持原樣即可。

          由于我們沒(méi)有更改 package.json 的內(nèi)容,現(xiàn)在可以直接發(fā)布了。只需執(zhí)行如下命令:

          npm publish


          恭喜!你已經(jīng)成功發(fā)布了一個(gè) Vue 組件庫(kù),可以訪問(wèn)  npmjs.com  查看。



          原文:https://www.freecodecamp.org/news/how-to-create-and-publish-a-vue-component-library/

          作者:Brian Barrow

          譯者:Humilitas


          非營(yíng)利組織 freeCodeCamp.org 自 2014 年成立以來(lái),以“幫助人們免費(fèi)學(xué)習(xí)編程”為使命,創(chuàng)建了大量免費(fèi)的編程教程,包括交互式課程、視頻課程、文章等。我們正在幫助全球數(shù)百萬(wàn)人學(xué)習(xí)編程,希望讓世界上每個(gè)人都有機(jī)會(huì)獲得免費(fèi)的優(yōu)質(zhì)的編程教育資源,成為開(kāi)發(fā)者或者運(yùn)用編程去解決問(wèn)題。

          你也想成為

          freeCodeCamp 社區(qū)的貢獻(xiàn)者嗎

          歡迎點(diǎn)擊以下文章了解

          ??
          招募丨freeCodeCamp 翻譯計(jì)劃
          成為 freeCodeCamp 專(zhuān)欄作者,與世界各地的開(kāi)發(fā)者分享技術(shù)知識(shí)

          瀏覽 67
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  YY6080伦理韩国日本 | 91丁香 | 精品视频婷婷 | 成人国产三级精品秘 | 视频国产精品 |