require.context(directory, useSubdirectories = false, regExp = /^\.\//)
複製代碼
require.context()是能夠用來建立本身(模塊)上下文的方法,有3個參數:vue
//(建立了)一個包含了 test 文件夾(不包含子目錄)下面的、全部文件名以 `.test.js` 結尾的、能被 require 請求到的文件的上下文。
require.context("./test", false, /\.test\.js$/);
//(建立了)一個包含了父級文件夾(包含子目錄)下面,全部文件名以 `.stories.js` 結尾的文件的上下文。
require.context("../", true, /\.stories\.js$/);
複製代碼
關於require.context的返回值:一個函數webpack
這個函數能夠接收一個參數:request,這個request是指在require()語句中的表達式,直接調用該方法能夠獲得對應模塊; 另外,函數也是對象,該函數有3個屬性: resolve, keys, id。web
(又要去趕項目了,先把用法記錄下來)正則表達式
如在vue項目中的store/modules下有多個模塊小程序
const context = require.context('./modules', false, /\.js$/)
// 要跳過的模塊
const excludes = ['index', 'base']
const modules = context.keys().reduce((m, k) => {
const name = k.slice(2, -3)
if (!excludes.includes(name)) {
m[name] = context(k).default
}
return m
}, {})
export default modules
複製代碼
因爲本身學藝不精,對於這個require學習不到位,致使後來在用mpvue作小程序項目的時候碰壁了,一樣是上面這段代碼,在基於mpvue的項目中卻一直報 require.context is not a function,具體緣由如今不明白,猜想應該是webpack的問題,正在學習,有知道的大神能夠指教下。數組
臨時找了個解決方法:安裝require-context
這個依賴,而後代碼修改以下:函數
const requireContext = require('require-context')
const path = require('path')
const context = requireContext(path.join(__dirname, './routes'), false, /\.js$/)
const routes = context.keys().reduce((rt, k) => {
rt = rt.concat(context(k))
return rt
}, [])
module.exports = routes
複製代碼
這裏是想把路由文件統一加載進來,用法跟加載路由同樣。學習