webpack loader 实现
位置
首先我们要知道 loader 插件是写在哪里的
打开webpack.config.js
文件, 在module.rules
中加入我们的自定义 loader:
{ test: /.ts$/, use: [ { loader: path.resolve(__dirname,'./build/loader.js'), options: { foo: true, } } ] }
参数获取:
const options = getOptions(this);
传入的参数校检:
const schema = { type: 'object', properties: { test: { type: 'string' } } } as const validate(schema, options);
而我们创建对应路径的 loader.ts 这里我们使用 ts 来写 loader:
loader.ts:
import {getOptions} from 'loader-utils'; import {validate} from 'schema-utils'; const schema = { type: 'object', properties: { test: { type: 'string' } }} as const // 用来验证参数的工具 export default function (source) { // 通过工具函数 getOptions 来获取参数 const options = getOptions(this); // 使用工具参数来验证, 如果不通过验证则抛出 Error validate(schema, options); // 打印代码 console.log('source', source) // 在这里我们可以对代码进行一系列的操作 // 假如我们要替换一些不想要的数据: const _source = source.replace(/alert(1)/, `console.log('grewer')`) console.log('_source', _source) return _source; };
现在使用 typescript 的 API 来解析 ts 代码:
const compiler = typescript let result = compiler.transpileModule(source, { compilerOptions: { module: typescript.ModuleKind.CommonJS } }) console.log(result.outputText) return result.outputText;
关于 transpileModule
这个 API 需要查看文档:
原文档:https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API
翻译的中文文档: https://zhuanlan.zhihu.com/p/141410800
typescript 具有很多我们不经常使用的 api, 如果有兴趣可以自己查阅
结语
像这样 我们就能创建我们自己的 loader, 在里面对我们的源码进行不同的操作, 像是 vue-loader 就是通过标签 分开三种(html,js,css) 系统的代码 再将其通过剩余 loader 里面
本文中写的 loader: https://github.com/Grewer/JsDemo/blob/master/webpackLoader/loader.ts
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2017-11-24 分享一篇vue项目规范