随着项目的复杂,文件结构越来越多,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. Apache解析漏洞

    多解析特性 在Apache1.x,2.x中Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断.因此对于apache而言,一个test.php.qwea文件依 ...

  2. 学习Android Jetpack? 入门教程和进阶实战这里全都有!

    前言 2018年谷歌I/O,Jetpack横空出世,官方介绍如下: Jetpack 是一套库.工具和指南,可帮助开发者更轻松地编写优质应用.这些组件可帮助您遵循最佳做法.让您摆脱编写样板代码的工作并简 ...

  3. 小知识get:利用单臂路由实现不同vlan间路由

    一.单臂路由概述 1.1.单臂路由实现不同vlan间通信 链路类型 交换机连接主机的端口为access链路 交换机连接路由器的端口为Trunk链路 子接口 路由器的物理接口可以被划分成多个逻辑接口 每 ...

  4. 成为编程大牛很简单,把这些书看个八成就OK

    原文链接:http://lucida.me/blog/developer-reading-list/ 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍 ...

  5. 【笔记】浅谈支持向量机(SVM)

    SVM支持向量机 支持向量机的思想原理 使用支持向量机的思想,既可以解决回归问题,又可以解决分类问题 那么支持向量机的思想是什么? 已经知道逻辑回归这种算法的本质就是在一个平面中寻找决策边界,而分类算 ...

  6. murmur3 hash(hash算法)

    HashUtil.java package com.example.test.util; import com.google.common.base.Charsets; import com.goog ...

  7. SQL注入的那些面试题总结

    一.知识储备类 1.SQL与NoSQL的区别? SQL:关系型数据库 NoSQL:非关系型数据库 存储方式:SQL具有特定的结构表,NoSQL存储方式灵活 性能:NoSQL较优于SQL 数据类型:SQ ...

  8. 【AIOT】智能感知--人

    From: https://liudongdong1.github.io/ 1. 人体存在感知 目标:检测环境中的所有人体,标记出每个人体的坐标位置:不限人体数量,适应中低空斜拍.人体轻度遮挡.截断等 ...

  9. Window如何查看cpu核数,更改CPU开启的核数?

    转载地址:http://www.win7zhijia.cn/win10jc/win10_8627.html

  10. Spring boot集成Redis实现sessions共享时,sessions过期时间问题分析

    Springboot鼓励零配置的方式,帮你做好大部分重复劳动的事,好到不能再好:具体的Redis安装方法和Springboot集成Redis方法,可以去搜索相关文章或参考该文章http://www.c ...