随着项目的复杂,文件结构越来越多,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文件呢?

  那么这里就会用到webpack文档中的require.context( ) ,来实现前端工程化;

   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( )的更多相关文章

  1. vue 动态注册路由 require.context

    需求场景: 在日常的功能练习和调试过程中,需要一个demo项目进行功能测试,由于频繁.vue页面的同时,又要再router.js文件里面注册路由,感觉有点无聊和枯燥.基于此出发点,考虑能否自动读取文件 ...

  2. vue 动态添加路由 require.context()

    之前的写法 'use strict' import Vue from 'vue' import MessageBroadcast from 'page/MessageBroadcast' import ...

  3. 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML(转)

    1.什么是工程化开发 软件工程的工程化开发概念由来已久,但对于前端开发来说,我们没有像VS或者eclipse这样量身打造的IDE,因为在大多数人眼中,前端代码无需编译,因此只要一个浏览器来运行调试就行 ...

  4. 通过config文件配置动态导入模块

    需求: 固定的服务中要调用不同的算法,当前服务中实现的动态导入是通过在config配置中加上参数:proto="AiProto(1,4)",在服务中from pathname im ...

  5. 公司内部技术分享之Vue.js和前端工程化

    今天主要的核心话题是Vue.js和前端工程化.我将结合我这两年多的工作学习经历来谈谈这个,主要侧重点是前端工程化,Vue.js侧重点相对前端工程化,比重不是特别大. Vue.js Vue.js和Rea ...

  6. 使用webpack+vue.js构建前端工程化

    参考文章:https://blog.csdn.net/qq_40208605/article/details/80661572 使用webpack+vue.js构建前端工程化本篇主要介绍三块知识点: ...

  7. vue组件续和前端工程化

    1.3 插槽 slot template: ` <button> <slot></slot> </button> ` <my-button> ...

  8. 10分钟学会前端工程化(webpack4.0)

    一.概要 1.1.前端工程化 随着前端的不断发展与壮大,前端变得越来越复杂,组件化.模块化.工程化.自动化成了前端发展中不可或缺的一部分,具体到前端工程化,面临的问题是如何提高编码->测试-&g ...

  9. 基于webpack的前端工程化开发解决方案探索(二):代码分割与图片加载

    今天我们继续来进行webpack工程化开发的探索! 首先来验证上一篇文章   基于webpack的前端工程化开发解决方案探索(一):动态生成HTML  中的遗留问题:webpack将如何处理按需加载的 ...

随机推荐

  1. Java流程控制03——选择结构

    选择结构 if单语句结构 我们很多时候要去判断一个东西是否可行,然后我们才去执行,这样一个过程我们用if语句来表示 语法  if(布尔表达式){ //如果布尔表达式结果为true将执行的语句 } if ...

  2. 虚拟机中桥接模式和NAT模式以及仅主机模式的区别

    桥接模式和NAT模式 网络连接类型的选择,网络连接类型一共有桥接.NAT.仅主机和不联网四种. 桥接:选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系,相当于连接在同一交换机上. NAT:NAT模 ...

  3. BUUCTF-[HCTF 2018]admin(Unicode欺骗&伪造session)

    目录 方法一:Unicode欺骗 方法二:伪造session 参考文章 记一道flask下session伪造的题. 方法一:Unicode欺骗 拿到题目f12提示you are not admin,显 ...

  4. 用Matlab求解微分方程

    用Matlab求解微分方程 解微分方程有两种解,一种是解析解,一种是数值解,这两种分别对应不同的解法 解析解 利用dsolve函数进行求解 syms x; s = dsolve('eq1,eq2,.. ...

  5. 一文让你彻底掌握ArcGisJS地图管理的秘密

    使用ArcGis开发地图 引用ArcGisJS 使用ArcGisJS开发地图,首先需要引入ArcGis的Js文件和CSS文件,引入方式有两种,一种是官网JS引用,一种是本地JS引用.如下: 官网JS引 ...

  6. 【笔记】Stacking方法

    Stacking 先前学习的集成学习 先前的思路很简单,假设有三个算法,每个算法都对数据进行一个预测,最后综合这三个结果得出一个最终结果,对于分类问题可以进行少数服从多数,对于回归问题可以简单地取平均 ...

  7. Docker++:从 0 到 1 学习Docker(笔记)

    本篇文章有点长 ... 知识点如下:下 ↓ ↓ ↓ ~ 初识 Docker  ~ Docker 命令 ~ Docker 容器的数据卷 ~ Docker 应用部署 ~ Dockerfile ~ Dock ...

  8. IDE快捷键的使用

    ctrl+ait+l,整理代码 ctrl+atl+v,生成等号左边的类型和变量 shift+方向键,选择内容 ctrl+方向键,自己领悟.常常与shift同时使用 ctrl+alt+方向键,光标前进或 ...

  9. java对xml节点属性的增删改查实现方法

    package vastsum; import java.io.File; import java.io.FileWriter; import java.util.Iterator; import o ...

  10. NOIP 模拟 $30\; \rm 毛二琛$

    题解 \(by\;zj\varphi\) 原题问的就是对于一个序列,其中有的数之间有大小关系限制,问有多少种方案. 设 \(dp_{i,j}\) 表示在前 \(i\) 个数中,第 \(i\) 个的排名 ...