webpack的带表达式require和require.context()方法

带表达式的 require 语句
如果 require参数含有表达式(expressions),会创建一个上下文(context),因为在编译时(compile time)并不清楚具体是哪一个模块被导入

require("./template/" + name + ".ejs");
1
webpack 解析 require() 的调用,提取出来如下这些信息:

Directory: ./template
Regular expression: /^.*\.ejs$/12
1
2
会返回template目录下的所有后缀为.ejs模块的引用,包含子目录。

require.context()
可以使用 require.context() 方法来创建自己的(模块)上下文。

这个方法有 3 个参数:

要搜索的文件夹目录
是否还应该搜索它的子目录
以及一个匹配文件的正则表达式。
require.context(directory, useSubdirectories, regExp);
1
使用:

require.context("./test", false, /\.test\.js$/);
//(创建了)一个包含了 test 文件夹(不包含子目录)下面的、所有文件名以 `.test.js` 结尾的、能被 require 请求到的文件的上下文。
1
2
require.context("../", true, /\.stories\.js$/);
//(创建了)一个包含了父级文件夹(包含子目录)下面,所有文件名以 `.stories.js` 结尾的文件的上下文。
1
2
总结:

require.context模块导出(返回)一个(require)函数。这个函数可以接收一个参数:request 函数——这里的 request 应该是指在 require() 语句中的表达式 。
require.context 第一个参数不能是变量,webpack在编译阶段无法定位目录。
导出的方法有 3 个属性: resolve, keys, id。
resolve 是一个函数,它返回请求被解析后得到的模块 id。
keys 也是一个函数,它返回一个数组,由所有可能被上下文模块处理的请求组成。
id 是上下文模块里面所包含的模块 id. 它可能在你使用 module.hot.accept 的时候被用到

原文地址:https://www.cnblogs.com/mmzuo-798/p/11988219.html

时间: 2024-09-29 10:19:44

webpack的带表达式require和require.context()方法的相关文章

webpack自带的跨域代理配置

问题:开发过程中难免有跨域的问题. 解决:webpack代理的配置 const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); const webpack = require('webpack'); module.exports = { entry:

C#Lambda表达式的理解:谓词方法 匿名方法 使用Lambda

Lambda表达式 "Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量.它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式.所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to".Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块. 下面三个方法会帮你会容易理解到Lambda表达式的好处,

win7自带刻录功能的使用方法

win7自带刻录功能用起来其实很方便. 弹出“刻录光盘”对话框的两种方法: 1.把一张空白光盘放入刻录机,打开“计算机”窗口,双击DVD RW 驱动器图标(或选中该图标右击点击“打开”),弹出“刻录光盘”对话框,选择刻录类型. 2.把一张空白光盘放入刻录机,把需要刻录的文件直接右击——>发送到DVD RW 驱动器,弹出“刻录光盘”对话框,选择刻录类型. 这里有两个刻录类型:一个是“类似于USB闪存驱动器”:另一个是“带有CD/DVD播放器”.选择“类似于USB闪存驱动器”, 将刻录一张可以随时保

由ORA-28001同一时候带出ORA-28000的解决的方法

今天,在登录tomcat前台界面时发现不能登录,查看log后发现原来是ORA-28001: the password has expired的错误,这个错误是因为Oracle11G的新特性所致, Oracle11G创建用户时缺省password过期限制是180天(即6个月), 假设超过180天用户password未做改动则该用户无法登录. 可通过例如以下SQL语句 SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_na

微信支付 带apiclient_cert.p12证书的请求方法 JAVA版

以下是带apiclient_cert.p12证书的请求方法 package utils.wechat; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.security.KeyStore; import javax.net.ssl.SSLContext; import org.apache.http.HttpEntity; import org.apache.

Lamb表达式匿名类实现接口方法

Lamb表达式匿名类实现接口方法 import java.util.ArrayList; public class HandlerDemo{ public static void main(String[] args) { ArrayList<Object> list = new ArrayList<>(); // 测试匿名类实现doBusy方法 new HandlerDemo().testHandler(() -> { list.add("测试匿名类实现doBus

LUA require 搜索路径指定方法

如果是一个 *.LUA 的文件, 里面用到了自己写的库, 或者第三方写的库, 但是你不想把它放到 lua 的安装目录里, 则在代码里面可以指定require搜索的路径. package.path = '/usr/local/share/lua/5.1/?.lua;/home/resty/?.lua;' --搜索lua模块 package.cpath = '/usr/local/lib/lua/5.1/?.so;' --搜索so模块 如果是要在 nginx.conf 文件中引用第三方的库,则需要在

require.js 基础使用方法记录

require.js作为javsscript的一种模块化编程规范,异步加载模块,主要应用于浏览器端,异步加载js文件,让浏览器不会因为在加载js文件而失去响应. 一.开始 目录结构: 首先要加载require.js <!-- ***.html--> <script data-main="js/app.js" src="js/require.js" defer></script> app.js即是入口文件,我们在里面加载math.j

Lua require搜索路径指定方法

在自己的lua文件中,如果使用到了自己写的C库或者第三方库,想让lua编译到自己指定的目录下寻找*.lua或*.so文件的时候,可以再自己的Lua代码中添加如下代码,可以指定require搜索的路径. package.path = '/usr/local/share/lua/5.1/?.lua;/home/resty/?.lua;'    --搜索lua模块    package.cpath = '/usr/local/lib/lua/5.1/?.so;'        --搜索so模块 如果是