2020-12-29

webpack之require.context实现前端工程自动化

使用require.context实现前端工程自动化

require.context是什么

一个webpack的api,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多模块的情况,可以使用这个api,它会遍历文件夹中的指定文件,然后自动导入,使得不需要每次显式的调用import导入模块

什么时候需要用到require.context

在Vue写的项目中,我把路由通过不同的功能划分成不同的模块,在index.js中一个个导入,随着项目越来越大,结构越来越复杂,每次都得手动import就很是令人烦躁
这个时候我们可以使用require.context函数遍历modules文件夹的所有文件一次性导入到index.js中

require.context参数说明

require.context函数接受三个参数

  1. directory {String} -读取文件的路径
  2. useSubdirectories {Boolean} -是否遍历文件的子目录
  3. regExp {RegExp} -匹配文件的正则
//例如require.context('./modules', false, /.test.js$/)/*上面的代码遍历当前目录下的modules文件夹的所有.js结尾的文件,不遍历子目录就像这样 */router       // 路由文件夹 |__index.js     // 总入口,这里做一些自动化处理 |__common.js     // 通用路由:声明通用路由 |__modules      // 业务逻辑模块:所以的业务逻辑模块  |__b.js    	 // 业务模块b  |__home.js    // 业务模块home:业务模块  |__a.js     // 业务模块a 

在index.js中调用 require.context('./modules', false, /.js$/);会得到modules文件下3个文件的执行环境

值得注意的是require.context函数执行后返回的是一个函数,并且这个函数有3个属性

  1. resolve {Function} -接受一个参数request,request为modules文件夹下面匹配文件的相对路径,返回这个匹配文件相对于整个工程的相对路径
  2. keys {Function} -返回匹配成功模块的名字组成的数组
  3. id {String} -执行环境的id,返回的是一个字符串,主要用在module.hot.accept,应该是热加载?

这三个都是作为函数的属性(注意是作为函数的属性,函数也是对象,有对应的属性)

废话不多说 直接上代码,看看怎么用

index.js自动化文件中这么写

const files = require.context('./modules', false, /\.js$/)console.log(files.keys()) // ["./home.js"] 返回一个数组let configRouters = []/*** inject routers*/files.keys().forEach(key => { configRouters = configRouters.concat(files(key).default) // 读取出文件中的default模块})export default configRouters // 抛出一个Vue-router期待的结构的数组

业务模块中这样写

import Frame from '@/views/frame/Frame'import Home from '@/views/index/index'export default [ // 首页 {  path: '/index',  name: '首页',  redirect: '/index',  component: Frame,  children: [ // 嵌套路由  {   path: '',   component: Home  }  ] }]

大功告成!!!!









原文转载:http://www.shaoqun.com/a/504289.html

跨境电商:https://www.ikjzd.com/

拍拍:https://www.ikjzd.com/w/2205

promotion:https://www.ikjzd.com/w/127


使用require.context实现前端工程自动化require.context是什么一个webpack的api,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多模块的情况,可以使用这个api,它会遍历文件夹中的指定文件,然后自动导入,使得不需要每次显式的调用import导入模块什么时候需要用到require.
虚拟信用卡:虚拟信用卡
蜜芽宝贝官网:蜜芽宝贝官网
手把手教你如何找到真实海外deal网站的邮箱:手把手教你如何找到真实海外deal网站的邮箱
11个多平台listing工具,事半功倍的利器!:11个多平台listing工具,事半功倍的利器!
马来西亚传统服饰名俗 - :马来西亚传统服饰名俗 -

No comments:

Post a Comment