webpack源码中loader机制使用须知

这次给大家带来webpack源码中loader机制使用须知,webpack源码中loader机制使用的注意事项有哪些,下面就是实战案例,一起来看一下。

loader概念

loader是用来加载处理各种形式的资源,本质上是一个函数, 接受文件作为参数,返回转化后的结构。

loader 用于对模块的源代码进行转换。loader 可以使你在 import 或”加载”模块时预处理文件。因此,loader 类似于其他构建工具中“任务(task)”,并提供了处理前端构建步骤的强大方法。loader 可以将文件从不同的语言(如 TypeScript)转换为 JavaScript,或将内联图像转换为 data URL。loader 甚至允许你直接在 JavaScript 模块中 import CSS文件!

loader和plugin区别

之前一篇文章中介绍了plugin机制,和今天研究的对象loader,他们两者在一起极大的拓展了webpack的功能。它们的区别就是loader是用来对模块的源代码进行转换,而插件目的在于解决 loader 无法实现的其他事。为什么这么多说呢?因为plugin可以在任何阶段调用,能够跨Loader进一步加工Loader的输出,在构建运行期间,触发事件,执行预先注册的回调,使用compilation对象做一些更底层的事情。

loader用法

配置

module: {  rules: [   {    test: /.css$/,    use: [     { loader: 'style-loader' },     {      loader: 'css-loader'     }    ]   }  ] }

登录后复制

内联

import Styles from 'style-loader!css-loader?modules!./styles.css';

登录后复制

CLI

webpack --module-bind 'css=style-loader!css-loader'

登录后复制

说明 上面三种使用方法作用都是将一组链式的 loader, 按照从右往左的顺序执行,loader 链中的第一个 loader 返回值给下一个 loader。先使用css-loader解析 @import 和 url()路径中指定的css内容,然后用style-loader 会把原来的 CSS 代码插入页面中的一个 style 标签中。

loader实现

//将css插入到head标签内部module.exports = function (source) {  let script = (`   let style = document.createElement("style");   style.innerText = ${JSON.stringify(source)};   document.head.appendChild(style);  `);  return script;}//使用方式1resolveLoader: {  modules: [path.resolve('node_modules'), path.resolve(dirname, 'src', 'loaders')]},{  test: /.css$/,  use: ['style-loader']},//使用方式2//将自己写的loaders发布到npm仓库,然后添加到依赖,按照方式1中的配置方式使用即可

登录后复制

说明 上面是一个简单的loader实现,同步的方式执行,相当于实现了style-loader的功能。

loader原理

function iteratePitchingLoaders(options, loaderContext, callback) {  var currentLoaderObject = loaderContext.loaders[loaderContext.loaderIndex];  // load loader module  loadLoader(currentLoaderObject, function(err) {    var fn = currentLoaderObject.pitch;    runSyncOrAsync(      fn,      loaderContext, [loaderContext.remainingRequest, loaderContext.previousRequest, currentLoaderObject.data = {}],      function(err) {        if(err) return callback(err);        var args = Array.prototype.slice.call(arguments, 1);        if(args.length > 0) {          loaderContext.loaderIndex--;          iterateNormalLoaders(options, loaderContext, args, callback);        } else {          iteratePitchingLoaders(options, loaderContext, callback);        }      }    );  });}

登录后复制

说明 上面是webpack源码中loader执行关键步骤,递归的方式执行loader,执行机流程似于express中间件机制

参考源码

webpack: “4.4.1”

webpack-cli: “2.0.13”

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

JS实现动态进度条步骤分析

js+css实现页面可控速度的打字效果

以上就是webpack源码中loader机制使用须知的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2765834.html

(0)
上一篇 2025年3月8日 11:03:46
下一篇 2025年2月27日 21:21:08

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue cli升级webpack4步骤详解

    这次给大家带来vue cli升级webpack4步骤详解,vue cli升级webpack4的注意事项有哪些,下面就是实战案例,一起来看一下。 webpack4 released 已经有一段时间了,插件系统趋于平稳,适逢对webpack3的…

    编程技术 2025年3月8日
    200
  • webpack脚手架优化使用

    这次给大家带来webpack脚手架优化使用,webpack脚手架优化使用的注意事项有哪些,下面就是实战案例,一起来看一下。 优化类目 样式分离 第三方资源分离 区分开发环境 热更新 提取公共代码 1. CSS分离 npm install e…

    2025年3月8日
    200
  • webpack4.0打包优化步骤详解

    这次给大家带来webpack4.0打包优化步骤详解,webpack4.0打包优化的注意事项有哪些,下面就是实战案例,一起来看一下。 webapck4 新特性介绍-参考资料 当前依赖包的版本   1.优化loader配置  1.1 缩小文件匹…

    2025年3月8日 编程技术
    200
  • Webpack如何实现持久化缓存

    这次给大家带来Webpack如何实现持久化缓存,Webpack实现持久化缓存的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 最近在看 webpack 如何做持久化缓存的内容,发现其中还是有一些坑点的,正好有时间就将它们整理总结一下…

    编程技术 2025年3月8日
    200
  • Bootstrap中使用WebUploader步骤详解

    这次给大家带来Bootstrap中使用WebUploader步骤详解,Bootstrap中使用WebUploader的注意事项有哪些,下面就是实战案例,一起来看一下。 在我毕设项目中有个需求是在Bootstrap模糊框中显示WebUploa…

    2025年3月8日
    200
  • 为什么不能用ip访问webpack本地开发环境

    这次给大家带来为什么不能用ip访问webpack本地开发环境,解决ip无法访问webpack本地开发环境的注意事项有哪些,下面就是实战案例,一起来看一下。 问题描述: 只能用http://localhost:8080访问项目,不能用http…

    2025年3月8日
    200
  • webpack vue项目开发环境局域网绑定IP方法

    这次给大家带来webpack vue项目开发环境局域网绑定IP方法,webpack vue项目开发环境局域网绑定IP的注意事项有哪些,下面就是实战案例,一起来看一下。 思路:将自己的项目启动ip与端口固定,当然端口也可以为默认的8080 步…

    编程技术 2025年3月8日
    200
  • webpack打包压缩js与css步骤详解

    这次给大家带来webpack打包压缩js与css步骤详解,webpack打包压缩js与css的注意事项有哪些,下面就是实战案例,一起来看一下。 打包压缩js与css 由于webpack本身集成了UglifyJS插件(webpack.opti…

    编程技术 2025年3月8日
    200
  • webpack+myproject构建项目时ip无法访问应如何处理

    这次给大家带来webpack+myproject构建项目时ip无法访问应如何处理,处理webpack+myproject构建项目时ip无法访问的注意事项有哪些,下面就是实战案例,一起来看一下。 问题 vue init webpack myp…

    2025年3月8日
    200
  • 利用JS hash制作单页Web应用的方法详解

    这篇文章主要介绍了关于利用js hash制作单页web应用的方法详解,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 前言 本文主要给大家介绍了关于利用JS hash制作单页Web应用的相关内容,分享出来供大家参考学习,下面话…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论