dva redux數據管理都在models,根據業務不同models可能會有幾十甚至上百的 【模塊.js】,
每次在index.js使用 app.model(require('./models/example').default); 引入 Model 可能要寫多個,
那么如何優雅的擴展model,不去重復的require model呢,利用 require.context就可以做到。
require.context是什么
你可以使用該require.context()
函數創建自己的上下文。
它允許您傳入一個目錄進行搜索,一個標志指示是否應該搜索子目錄,還有一個正則表達式來匹配文件。
webpack require.context()
在構建時解析代碼
語法如下:
require.context(directory, useSubdirectories = false, regExp = /^\.\//);
directory 目錄,如當前目錄下的test: './test' useSubdirectories是否使用子目錄, regExp 正則匹配test文件夾下的文件 如匹配js文件 /\.js$/
如下 取出當前目錄下的js文件,並過濾掉index.js文件,再用map遍歷文件名,context返回default方法:
const context = require.context('./', false, /\.js$/); export default context .keys() .filter(item => item !== './index.js') .map(key => context(key));
index.js文件引用models:
require('./models').default.forEach(key => { app.model(key.default); });
其他使用是一樣的,只是不用一個個去require模塊了。