require.context()

require.context()

用法:

接受三個參數(require.context(directory,useSubdirectories,regExp))

directory:說明需要檢索的目錄
useSubdirectories:是否檢索子目錄
regExp: 匹配文件的正則表達式,一般是文件名

返回參數

require.context返回一個require 函數,此函數可以接收一個參數

返回的函數:function webpackContext(req) {return __webpack_require__(webpackContextResolve(req))};

函數有三個屬性:resolve 、keys、id

        · resolve: 是一個函數,他返回的是被解析模塊的id ,接受一個參數request。

        · keys: 也是一個函數,他返回的是一個數組,該數組是由所有可能被上下文模塊解析的請求對象組成

        · id:上下文模塊的id

應用場景:

如果頁面需要導入多個組件時,一般的寫法

import aaa from '@/components/login/aaa'
import bbb from '@/components/login/bbb'
import ccc from '@/components/login/ccc'
import ddd from '@/components/login/ddd'
components:{
    aaa,
    bbb,
    ccc,
    ddd,
}

此時可以看出代碼重複量很大

使用require.context()時的寫法就簡潔了許多

const path = require('path')
const files = require.context('@/components/login', false, /\.vue$/)
const modules = {}
files.keys().forEach(key => {
  const name = path.basename(key, '.vue') // 提取出用 ‘/' 隔開的path的最後一部分,path.basename(p, [ext])。 p要處理的path,ext要過濾的字符
  modules[name] = files(key).default || files(key)
})
components:modules 

files此時是一個函數

files.keys()屬性方法執行後會返回一個數組:["./aaa.vue", "./bbb.vue", "./ccc.vue", "./ddd.vue"]

files.resolve('./aaa.vue')屬性方法傳入一個login文件下的相對路徑('./aaa.vue')會返回匹配到的文件的絕對路徑("./src/components/login/aaa.vue")

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章