【Vue】用單文件(SFC,Single File Components)開發自定義組件,把這些組件生成到一個JS里。


【Vue】用單文件(SFC,Single File Components)開發自定義組件,把這些組件生成到一個JS里。在頁面里只要引用這個JS,就可以使用所有的自定義組件。


 

Vue是一個漸進式的JS框架,核心庫只關注視圖層,並且很容易與其他庫或現有項目進行集成。比如我只想用Vue來構建頁面的部分組件,那只要引入Vue核心庫和自定義的組件即可。

簡單實例如下:

custom-components.js

Vue.component('button-counter', {
  data: function () {
    return {
      count: 0
    }
  },
  template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>'
})

HTML里引入Vue核心庫和custom-components.js,就能使用這個自定義組件。

<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Vue Component Demo</title>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <script src="custom-components.js"></script>
  </head>
  <body>
    <div id="components-demo">
      <button-counter></button-counter>
    </div>    
  </body>
</html>

但有個問題,這里的template是用字符串形式拼裝而成的,沒縮進、高亮等功能。當組件復雜的時候,用這種方式會讓人痛不欲生。

整個應用都用Vue實現的的時候,我們可以很輕易的使用單文件(下縮寫成SFC,Single File Components)形式開發組件,具體使用方式見官網Single File Components。一個組件相關的HTML、CSS、JS都放在同一個文件里,而且也支持語法高亮、JS模塊化、以及CSS Scope。

所以我們可能會一下問題。

碼農: Hi Vue,我們能否用SFC方式來實現組件,且仍舊用上面JS的方式引入所有的自定義組件?。

Vue:vue-cli-service build可以滿足你的要求

  完整命令:vue-cli-service build --target lib --formats=umd-min --dest public/dist --name custom-components --entry src/main.js

文件結構:compoents包含許多.vue文件,一個.vue文件就是SFC,即對應一個自定義組件。

命令詳解:

    • --target lib:生成一個JS文件,最終生成的文件得包含所有的自定義組件。
    • --dest public/dist:生成的JS在public/dist目錄下面。
    • --formats=umd-min: 我只需生成一種格式 -- umd-min。默認是生成三個:common、umd、umd-min。

他們之間的區別網上能搜索到,CommonJS、UMD。

    • --name custom-components:生成的JS文件前綴,見上圖。
    • --entry src/main.js:build入口,這里面的內容很關鍵,得引入所有的單文件。
import Vue from 'vue'

import menuNav from './components/menu-nav.vue';
import logo from './components/logo.vue';
import searchBar from './components/search-bar.vue';
import flowPath from './components/flow-path.vue';
import showcase from './components/showcase.vue'
import codeName from './directives/code-name.js';

Vue.directive('code-name', codeName);

Vue.component('menu-nav', menuNav);
Vue.component('logo', logo);
Vue.component('search-bar', searchBar);
Vue.component('flow-path', flowPath);
Vue.component('showcase', showcase);

export {

}

 因為通過Vue.component注冊組件,所以export一個空對象的就可。雖然我在這里import了Vue,但最終的生成的js不會包含Vue,vue-cli-service build會把它剔除掉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM