实现一个 webpack loader
官网上的定义:loader 是一个转换器,用于对源代码进行转换。
例如 babel-loader 可以将 ES6 代码转换为 ES5 代码。sass-loader 将 sass 代码转换为 css 代码。
一般 loader 的配置代码如下:
module: {rules: [{test: /\.js$/,use: [{loader: path.resolve('./loader1.js')},{loader: path.resolve('./loader2.js')}]}]
}
rules
数组包含了一个个匹配规则和具体的 loader 文件。
上述代码中的 test: /\.js$/
就是匹配规则,表示对 js 文件使用下面的两个 loader。
而 loader 的处理顺序是自下向上的,即先用 loader2 处理源码,然后将处理后的代码再传给 loader1。
loader2 处理后的代码就是最终的打包代码。
loader 的实现
loader 其实是一个函数,它的参数是匹配文件的源码,返回结果是处理后的源码。下面是一个最简单的 loader,它什么都没做:
module.exports = function (source) {return source
}
这么简单的 loader 没有挑战性,我们可以写一个稍微复杂一点的 babel-loader:
const loaderUtils = require('loader-utils')
const babel = require('@babel/core')
function loader (source) {let cb = this.async()let options = loaderUtils.getOptions(this)babel.transform(source, {...options,sourceMap: true,filename: this.resourcePath.split('/').pop()}, function (err, r) {cb(err, r.code, r.map)})
}module.exports = loader
异步 loader 需要调用 webpack 的 async()
生成一个 callback,它的第一个参数是 error
,第二个参数就是处理后的源码。当你异步处理完源码后,调用 callback 即可。
loader-utils 是一个 webpack 工具类,通过一些方法配合 loader 处理文件。loader 是可以配置 options 参数,然后内部可以直接通过 getOptions
获取。
module: {rules: [{test: /\.js$/,use: [{loader: path.resolve('./loader/loader1.js'),options: {presets: ['@babel/preset-env']}}]}]
}
babel-loader 使用的是 @babel/core 处理代码转换的,但是 @babel/core 本身不转换代码,它是调用 @babel/preset-env 插件转换的。
实现一个 webpack loader相关推荐
- 如何编写一个 Webpack Loader
前言 在平时自己由零搭建项目时,虽然基础配置都比较熟悉,比如配置 file-loader, url-loader, css-loader 等,配置不难,但究竟是怎么起作用的呢,今天就来说说如何编写一个 ...
- Webpack: Loader 开发分享
Webpack: Loader 开发分享 文章目录 Webpack: Loader 开发分享 正文 1. Concept 概念 2. Configuration 配置实例 3. Custom 自定义 ...
- webpack loader的套路
学习webpack loader,最后模拟style-loader.less-loader 什么是loader loader是一个函数,用来把文件转换成webpack识别的模块. loader API ...
- 从零开始一个webpack+react项目
从零开始一个webpack+react项目 最近在做react组件化的分享,从项目中抽离组件,那么第一步自然是搭建相关的环境 本篇旨在从零开始,用最少的配置.最少的代码.最少的依赖来搭建一个最简单的w ...
- 一次搞懂Webpack Loader
50 亿观众的 "云上奥运",顶级媒体背后的数智化力量 东京 2020 奥运会即将闭幕,本届奥运会由于疫情限制,东京地区赛事以无观众的空场形式举行,在无法亲临现场的情况下,全球观众 ...
- 【javascript】手写一个webpack loder
[javascript]手写一个webpack loder 手写一个loader 为什么需要loader? webpack 实际上只能处理js文件,那么对于除了js文件的其他类型的文件 比如 css ...
- webpack 复习(四)webpack loader
loader webpack 只是一个打包工具,它只负责分析各个模块的依赖关系,然后形成资源清单,最终打包生成到指定的文件中. 其他的功能需要借助 webpack loader 和 webpack p ...
- webpack loader解析及自定义loader
自定义实现webpack loader加载模块,解析指定的类型文件 loader loader是一个导出为函数的node模块,可通过this访问上下文. 特点: loader单一职责,只负责解决单一的 ...
- 用 vue-cli 手脚架 建立一个 webpack 模板 vue 项目
用 vue-cli 手脚架 建立一个 webpack 模板 vue 项目 一:vue 环境安装 如果环境安装好了,可以直接用vue-cli手脚架生成 模板项目, 一般用的是webpack模板. 1.去 ...
最新文章
- 【综述】闲话模型压缩之网络剪枝(Network Pruning)
- 【收藏】goland报错:报错package xxx is not in GOROOT or GOPATH 或者 cannot find package “xxx“ in any of
- 用最少数量的箭引爆气球
- 最新版富文本编辑器UEditor操作教程
- MySQL - Found option without preceding group in config file
- Actor-ES框架:Ray-Handler之ToReadHandler编写
- C/C++日志写入系统log(/var/log/syslog)
- php切割文件上传,php+ajax实现文件切割上传功能示例
- 干货:虚拟机兼容性和文件格式详解
- WinForm 快捷键设置
- CV2.imread得到的图像显示成蓝色的原因和3种BGR转RGB的方法
- [导入]警告:不能将项目“project”中的依赖项“file”复制到运行目录,因为它将改写引用“file”。...
- java数据读取容量,spring batch使用reader读数据的内存容量问题详解
- tl494cn逆变器电路图_用TL494制作的逆变电源
- CMMI基础知识扫盲 笔记
- word文档解密方法
- 一个30岁转行IT行业从小兵到主管的崎岖成长之路
- C#数据库教程5-ADO.NET登录页面设计
- 频率变标算法(FSA,Frequency Scaling)
- SpringBoot整合——阿里云对象存储(OSS)
热门文章
- 管理大型共享数据库,做到这几点不再头疼!
- 深度揭秘垃圾回收底层,这次让你彻底弄懂它
- 程序员过关斩将——搞定秒杀,只需要这几步!!
- 2021 年了,算法岗位应该怎样准备面试?
- 十年厚积!Arm Neoverse 重磅推出 V1 和 N2平台,加速基础设施转型
- 全国程序员工资最新统计来了,平均 14,542 元!
- 编程语言性能实测,Go 比 Python 更胜一筹?
- 小米回应“米家”商标争议;人人 App 回归社交市场;TiDB 2.1.19 发布| 极客头条...
- 保温杯都这么给力了,你的 Bug 就不能少点?
- @程序员,沟通这项核心技能你掌握了多少?