Vue自動化注冊全局組件腳本分享
自動化注冊全局組件
今天有一個idea,vue一些組件,可能會全局都用到,我覺得在main.js寫
Vue.component(name, instance)
然后很命令式,寫著也不好看,想著能夠有一個函數(shù)可以指定加載比如components下的文件,自動完成全局化注冊,想起來就很帥
放代碼
export function autoLoadingGlobalComponent() {
? const requireComponent = require.context(
? ? // 其組件目錄的相對路徑
? ? '../components',
? ? // 是否查詢其子目錄
? ? false,
? ? // 匹配vue后綴文件名的文件
? ? /\.vue$/
? )
? // 遍歷獲取到的文件名,依次進行全局注冊
? requireComponent.keys().forEach(fileName => {
? ? // 獲取組件配置(實例)
? ? const componentConfig = requireComponent(fileName)
? ? // 獲取組件的 PascalCase 命名(eg: MYHeader)
? ? const componentName = _.upperFirst(
? ? ? // 獲取駝峰式命名
? ? ? _.camelCase(
? ? ? ? // 剝?nèi)ノ募_頭的 `./` 和結(jié)尾的擴展名 eg: ./food-header.vue -> foodHeader
? ? ? ? fileName.replace(/^\.\/(.*)\.\w+$/, '$1')
? ? ? )
? ? )
? ? ? // 全局注冊組件
? ? Vue.component(
? ? ? componentName,
? ? ? // 如果這個組件選項是通過 `export default` 導(dǎo)出的,
? ? ? // 那么就會優(yōu)先使用 `.default`,
? ? ? // 否則回退到使用模塊的根。
? ? ? componentConfig.default || componentConfig
? ? )
? })
}vue組件注冊–全局注冊
使用require.context實現(xiàn)前端工程自動化(實現(xiàn)全局組件自動化注冊的js腳本)
vue的組件注冊分為全局注冊和局部注冊,使用上的基本區(qū)分如下:
本文腳本為參考vue官網(wǎng)文檔,并在js腳本代碼和注釋上做了一些調(diào)整,以求看了就理解會用。因官網(wǎng)文檔總是惜字如金,有些地方還不是那么一下就容易理解和使用,可以把該文章看做官網(wǎng)的進化版
全局注冊:即注冊完畢后,在全局皆可使用,無需import引入組件和compoment注冊組件,直接使用即可。如注冊的全局組件未使用,webpack在打包時,仍然會打包該組件內(nèi)容。(這里個人認為,如果不使用組件,那注冊它干嘛?所以大部分時候這個打包的注意事項可以忽略。當(dāng)然,如果留存組件,以備后續(xù)使用的,也可以進行局部注冊)。
局部注冊:將需要使用的組件寫在vue文件中,在需要使用的時候,利用import引入該文件,compoment注冊該組件并命名該組件在使用時的名字,然后即可像使用標(biāo)簽一樣使用此組件。(局部注冊與全局注冊的區(qū)別就是,如果局部注冊的組件你沒有使用過,那么在webpack打包時就不會打包該文件,如有組件留存在項目中,但后續(xù)可能會使用的,可以使用局部注冊)
廢話不多說,開始代碼;前面一段是該腳本使用的基本介紹,實用黨可跳過(建議都了解一下)
基本思路
一個webpack的api,通過執(zhí)行require.context函數(shù)獲取一個特定的上下文,主要用來實現(xiàn)自動化導(dǎo)入模塊,在前端工程中,如果遇到從一個文件夾引入很多模塊的情況,可以使用這個api,它會遍歷文件夾中的指定文件,然后自動導(dǎo)入,使得不需要每次顯式的調(diào)用import導(dǎo)入模塊
使用場景
在過去的組件需要導(dǎo)入和全局注冊時,利用require.context函數(shù),進行批量注冊,使得組件注冊實現(xiàn)自動化,即使用新的組件需要全局注冊,只需要在自定的文件夾下創(chuàng)建即可全局使用,但創(chuàng)建時要注意自己的自動化文件中的查找文件的匹配規(guī)則,否則,不符合自定義的查找規(guī)則,無法自動注冊為全局組件。
注意:**所有需要全局注冊的組件,都要在指定的文件夾內(nèi),否則該腳本遍歷不到你的組件,就無法進行自動化的注冊和使用了
在項目為webpack打包時,使用自動化全局注冊會更加友好:
基本代碼如下:
import vue from 'vue'
const requireComponent = require.context( // webpack的api,一個函數(shù)方法,匹配文件
'.', // 查看當(dāng)前目錄下的文件(查找需要文件的相對路徑)
false, // 不查看子文件
/.vue$/ // 匹配方式正則表達式,只查看后綴為.vue的文件
)
console.log(requireComponent)
// 循環(huán)獲取到的文件,可在循環(huán)時處理文件名
requireComponent.keys().forEach((fileName) => {
console.log(1)
// 獲取組件配置(組件模板)
const componentConfig = requireComponent(fileName)
// 將被注冊的組件名字,對獲取的組件文件名進行處理
const componentName = fileName
.replace(/^\.\/_/, '')
.replace(/\.\w+$/, '')
.split('./')
.join('')
console.log(componentName, '基礎(chǔ)組件文件獲取測試')
// 將組件在循環(huán)中注冊到全局,
vue.component(componentName, // 依據(jù)文件名處理好的,將要被注冊到全局的組件名
componentConfig.default || componentConfig)
})
在文件正確打印出處理好的組件名時,即表示自動化組件注冊基本完成,然后在main.js中引入自動化組件注冊的js文件
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import './components/component/_globals' // 直接引入共享到全局即可實現(xiàn)自動化組件注冊
Vue.config.productionTip = false
Vue.use(ElementUI)
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
需要注意的是:在團隊合作時,需要注意自動化文件中指定的組件文件夾,和匹配文件名的規(guī)則
如下為具體的文件位置和使用效果的截圖:



以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解vue開發(fā)中調(diào)用微信jssdk的問題
這篇文章主要介紹了vue開發(fā)中調(diào)用微信jssdk的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
深入理解與使用keep-alive(配合router-view緩存整個路由頁面)
這篇文章主要介紹了深入理解與使用keep-alive(配合router-view緩存整個路由頁面),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09
vue實現(xiàn)錨點跳轉(zhuǎn)scrollIntoView()使用案例
這篇文章主要介紹了vue實現(xiàn)錨點跳轉(zhuǎn)scrollIntoView()使用案例,文中結(jié)合實例代碼介紹了vue錨點跳轉(zhuǎn)的三種方式(頁內(nèi)跳轉(zhuǎn),跨頁跳轉(zhuǎn),函數(shù)跳轉(zhuǎn)),需要的朋友可以參考下2023-07-07

