vuex前端工程化之动态导入文件--require.context( )
随着项目的复杂,文件结构越来越多,Store中modules中的文件也越来越多,如果一个一个加载是不是很麻烦呢?
先看一个项目中store项目结构:

过去都是通过import分别引入文件:
1 import Vue from 'vue';
2 import Vuex from 'vuex';
3
4 Vue.use(Vuex);
5
6 import user from './modules/user';
7 import info from './modules/info';
8 //此处省略N多文件。。。。。
9
10 export default new Vuex.Store({
11 modules: {
12 user,
13 info
14 },
15 });
通过上述引入虽然可以达成效果但是如果有很多文件呢?难道也要一个一个引入?那么如何动态加载modules文件下的所有JS文件呢?
require.context( )语法如下:
require.context(directory, useSubdirectories = false, regExp = /^.//);
示例:
require.context("./test", false, /\.test\.js$/);
// (你创建了)一个test文件夹下面(不包含子目录),能被require请求到,所有文件名以 `.test.js` 结尾的文件形成的上下文(模块)。
require.context("../", true, /\.stories\.js$/);
// (你创建了)一个父级文件夹下面(包含子目录),所有文件名以 `.stories.js` 结尾的文件形成的上下文(模块)。
那么我们怎么把它应用到Vue项目当中呢?
1 import Vue from 'vue';
2 import Vuex from 'vuex';
3 import camelcase from 'camelcase’; //驼峰命名的一个npm包
4 Vue.use(Vuex);
5
6 const context = require.context('./modules', false, /\.js$/);
7 //获取moudules文件下所有js文件;
8 const moduleStores = {};
9
10 context.keys().forEach(key => {
11 // context.keys() 返回匹配成功模块的名字组成的数组
12 const fileName = key.slice(2, -3);
13 //截取名字
14 const fileNameInCamelCase = camelcase(fileName);
15 //camelcase 是一个驼峰命名包;
16 const fileModule = context(key).default;
17 //通过 context(key)导出文件内容。在文件中时通过 export.default 导出的,所以后边加.default
18 moduleStores[fileNameInCamelCase] = {
19 ...fileModule,
20 namespaced: true, //文件中有写可以省略;不过这样写可以不用给每个文件写入;这个属性不知道自己去查文档;
21 };
22 });
23
24 export default new Vuex.Store({
25 modules: {
26 ...moduleStores,
27 },
28 });
通过以上方法就可以动态的导入modules文件夹中的所有js文件,这样就方便管理了,也不用一个个引入;
如果你某个文件不想引入可以在forEach中,通过判断来解决:
1 context.keys().forEach(key => {
2 const fileName = key.slice(2, -3);
3 const fileNameInCamelCase = camelcase(fileName);
4 const fileModule = context(key).default;
5
6 if (fileName === 'user') {
7 return;
8 }
9 moduleStores[fileNameInCamelCase] = {
10 ...fileModule,
11 namespaced: true,
12 };
13 });
管理依赖-webpack中文档(2.2)-更多详细内容可查 : https://www.html.cn/doc/webpack2/guides/dependency-management/
vuex前端工程化之动态导入文件--require.context( )的更多相关文章
- vue 动态注册路由 require.context
需求场景: 在日常的功能练习和调试过程中,需要一个demo项目进行功能测试,由于频繁.vue页面的同时,又要再router.js文件里面注册路由,感觉有点无聊和枯燥.基于此出发点,考虑能否自动读取文件 ...
- vue 动态添加路由 require.context()
之前的写法 'use strict' import Vue from 'vue' import MessageBroadcast from 'page/MessageBroadcast' import ...
- 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML(转)
1.什么是工程化开发 软件工程的工程化开发概念由来已久,但对于前端开发来说,我们没有像VS或者eclipse这样量身打造的IDE,因为在大多数人眼中,前端代码无需编译,因此只要一个浏览器来运行调试就行 ...
- 通过config文件配置动态导入模块
需求: 固定的服务中要调用不同的算法,当前服务中实现的动态导入是通过在config配置中加上参数:proto="AiProto(1,4)",在服务中from pathname im ...
- 公司内部技术分享之Vue.js和前端工程化
今天主要的核心话题是Vue.js和前端工程化.我将结合我这两年多的工作学习经历来谈谈这个,主要侧重点是前端工程化,Vue.js侧重点相对前端工程化,比重不是特别大. Vue.js Vue.js和Rea ...
- 使用webpack+vue.js构建前端工程化
参考文章:https://blog.csdn.net/qq_40208605/article/details/80661572 使用webpack+vue.js构建前端工程化本篇主要介绍三块知识点: ...
- vue组件续和前端工程化
1.3 插槽 slot template: ` <button> <slot></slot> </button> ` <my-button> ...
- 10分钟学会前端工程化(webpack4.0)
一.概要 1.1.前端工程化 随着前端的不断发展与壮大,前端变得越来越复杂,组件化.模块化.工程化.自动化成了前端发展中不可或缺的一部分,具体到前端工程化,面临的问题是如何提高编码->测试-&g ...
- 基于webpack的前端工程化开发解决方案探索(二):代码分割与图片加载
今天我们继续来进行webpack工程化开发的探索! 首先来验证上一篇文章 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML 中的遗留问题:webpack将如何处理按需加载的 ...
随机推荐
- TypeScript学习笔记(四)装饰器
目录 一.装饰器的作用 二.类装饰器 1. 普通装饰器 为类扩展属性和方法 使用装饰器修改属性和重写方法 2. 装饰器工厂 三.属性装饰器 四.方法装饰器 使用方法装饰器对方法进行扩展 五.方法参数装 ...
- Android开发音视频方向学习路线及资源分享,学完还怕什么互联网寒冬?
接触Android音视频这一块已经有一段时间了,跟普通的应用层开发相比,的确更花费精力.期间为了学习音视频的录制,编码,处理也看过大大小小的几十个项目.总体感觉就是知识比较零散,对刚入门的朋友比较不友 ...
- Window2016 安装Docker
测试环境 Windows2016 DataCenter 安装步骤 1.开始运行"PowerShell" 2.指定Tls协议为1.2.(建议都先执行这一条命令,官方文档没有这一步,实 ...
- 修改Linux系统的默认语言编码集
RedHat 今天晚上发现服务器上vi的界面提示变成了乱码,只能将XShell的编码改为GBK才能正常显示,导致consolas字体无法使用,GBK编码下的字体丑陋无比,无法忍受,一轮google之后 ...
- 使用vimdiff做hg的版本比较工具
gvim的文本比较功能很强,命令行用法:gvim -d file1 file2,hg自带的hg diff没有颜色标示,含义也不够清晰,所以需要用vim的diff代替它,实现方法是在全局配置文件中增加: ...
- Java基础技术-Java其他主题【面试】
Java基础技术-Java其他主题[面试] Java基础技术IO与队列 Java BIO.NIO.AIO Java 中 BIO.NIO.AIO 的区别是什么? 含义不同: BIO(Blocking I ...
- 【笔记】scikit-learn中的Scaler(归一化)
scikit-learn中的数据归一化 在机器学习使用数据归一化的时候有一个重要的注意事项 我们对训练数据进行均值和方差的处理,得到mean_train以及std_train,但是在对测试数据进行归一 ...
- Python数学建模系列(一):规划问题之线性规划
@ 目录 前言 线性规划 样例1:求解下列线性规划问题 scipy库求解 样例2:求解下列线性规划问题 pulp库求解 样例3.运输问题 说明 结语 前言 Hello!小伙伴! 非常感谢您阅读海轰的文 ...
- NOIP 模拟 $34\; \rm Equation$
题解 \(by\;zj\varphi\) 发现每个点的权值都可以表示成 \(\rm k\pm x\). 那么对于新增的方程,\(\rm x_u+x_v=k\pm x/0\) 且 \(\rm x_u+x ...
- 使用HttpURLConnection多线程下载
1 import java.io.IOException; 2 import java.io.InputStream; 3 import java.io.RandomAccessFile; 4 imp ...