初识webpack的require.context

require.context

使用

require.context(directory:String, includeSubdirs:Boolean /* 可选的,默认值是 true */, filter:RegExp /* 可选的 */)
参数directory: 检索的目录, 如果是当前目录即 '.'   './'
参数includesSubdirs: 是否迭代子目录
参数filter: 匹配文件的正则表达式  如:/\.js$/ 匹配所有后缀"xx.js"结尾的文件

打印返回值:
在这里插入图片描述

  • keys {Function} -返回匹配成功模块的名字组成的数组
const requireApi = require.context('./', false, /.js$/);
console.log(requireApi.keys());
输出: ["./index.js", "./label.js"]
  • id {String} -执行环境的id,返回的是一个字符串。
const requireApi = require.context('./', false, /.js$/);
console.log(requireApi.id);
输出: ../../../WebProject/uni-app/uniapp-news/utils/api(检索目录) sync(同步方法) .js$(正则表达式)
  • resolve {Function} -接受一个参数request,request为检索的文件夹下面匹配文件的相对路径,返回这个匹配文件相对于整个工程的相对路径
const firstFile = requireApi.keys()[0];
console.log(requireApi.resolve(firstFile));
输出:../../../WebProject/uni-app/uniapp-news/utils/api/index.js




项目结构

在这里插入图片描述

使用 - 自动导入模块化的接口

  • 根据项目结构:

    • http.js:请求的根目录
    • label.js:所有有关label的接口都放在里面
    • index.js:自动化导出
  • 关系图:
    在这里插入图片描述

  • http.js

/**
 * http: network异步方法
 * 目的: 便于统一维护
 * 参数: 接受Object, 包含name:云函数名(must), data请求参数(not must)
 */
function http ({name, data=null}) {
	return new Promise((resolve, reject) => {
		// console.log('http =>', name, data);
		uniCloud.callFunction({
			name,
			data
		})
		.then(({result: res}) => {
			res.code == 200 ? resolve(res) : reject(res)
		})
		.catch(err => resolve(err));
	})
}

export default http
  • label.js
import http from '../http.js';

const label = {
	label_list() { return http({ name: 'get_label-list' }) }
}

export default {
	label
}
  • index.js - 自动化导出
/**
 * 通过webpack的自动化工程api自动导出
 */
const requireApi = require.context('./', false, /.js$/); // webpack自动化api

const api = {}; // 挂载Vue实例上的api对象!

// 自动化迭代处理
requireApi.keys().forEach(item => {
	
	// 过滤index.js
	if (item === './index.js') return
	Object.assign(api, requireApi(item).default); // 对象合并
})

export default api;
  • main.js 挂载
import Vue from 'vue'
import App from './App'
import api from './utils/api/index.js' 

Vue.config.productionTip = false
Vue.prototype.$api = api // 挂载
App.mpType = 'app'

const app = new Vue({
    ...App
})
app.$mount()

有问题欢迎大佬们指出 —— 全栈小菜鸡。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值