美文网首页
浅谈 require.context方法

浅谈 require.context方法

作者: _不惧岁月长 | 来源:发表于2019-12-19 14:55 被阅读0次

    1.简介

    require.context是Webpack中用来管理依赖的一个函数,此方法会生成一个上下文模块,包含目录下所有模块的引用,通过正则表达式匹配,然后require进来

    2.使用方法

     require.context('.', false, /\.vue$/)
    

    此方法有三个参数,
    参数一:要查询的目录,上述代码指的是当前目录
    参数二: 是否要查询子孙目录,方法默认的值为false
    参数三:要匹配的文件的后缀,是一个正则表达式,上述我要查询的是.vue文件

    require.context模块返回一个函数,这个函数可以接收一个参数

    导出的方法有 3 个属性: resolve, keys, id。
    resolve 是一个函数,它返回请求被解析后得到的模块 id。
    keys 也是一个函数,它返回一个数组,由所有可能被上下文模块处理的请求组成。
    id 是上下文模块里面所包含的模块 id. 它可能在你使用 module.hot.accept 的时候被用到

    3.应用场景

    import Vue from 'vue'
    let contexts = require.context('.', false, /\.vue$/)
    contexts.keys().forEach(component => {
        // debugger;
        let componentEntity = contexts(component).default
        // 使用内置的组件名称 进行全局组件注册
        Vue.component(componentEntity.name, componentEntity)
    })
    

    上述代码中写的是一个全局注册的组件,用到了keys属性,返回一个数组,通过遍历,来完成组件注册,
    contexts方法,内部就是返回引用webpack_require来加载模块,
    使用componentEntity.name,来作为组件名,

    image.png

    即上述图片组件中的name,

    文件目录

    image.png

    最后在main.js中引入index.js,该目录下的组件就全部被全局注册,可以在任意vue中使用这些组件,

    注意

    很多组件可能只是单个页面需要用到,我们在加载页面的过程中,希望组件也是按需加载的。组件全部注册,那么当页面需要引用其中某些组件时,是不是将所有的组件都打包引入了呢?全局注册的意思是不是已经全部被引入?

    对于所有组件都在项目中被用到的情况来说,全局注册和按需引入的方式在打包和运行效率上并没有什么区别,只是相对来说按需引入可读性更强一点。

    所以,大家可以根据自己的需求,合理使用

    附言:

    文中很多知识来源于官方文档,以及各位前辈总结的结果,我这里介绍的可能不太清楚,有什么错误,欢迎指出!

    基于vue+element 的后台管理框架

    GitHub: https://github.com/wxyfc/management-system

    网址: https://wxyfc.github.io/management-system/#/login,账号:admin 密码:admin 直接点击登录即可

    如果对您有帮助请点个小星星哦,谢谢大家观看,mua~

    相关文章

      网友评论

          本文标题:浅谈 require.context方法

          本文链接:https://www.haomeiwen.com/subject/iqxmnctx.html