zoukankan      html  css  js  c++  java
  • webpack(6) loader

    webpack做的事情, 仅仅是分析各个模块间的依赖关系, 将chunk里的资源合并成资源列表, 然后输出打包文件;

    更多的事情, 需要loader和plugin来完成;

     一.  loader

             本质是一个函数, 它的作用是将某个源码字符串转换成为另一个源码字符串.

    loaders执行过程:在webpack读取文件之后, 经过loader后形成转换后的代码, 然后交给AST分析

     

    处理loaders流程

     在webpack.config.js中配置loader

     1 module.exports = {
     2   module: {
     3     rules: [
     4       {
     5         test: /.js$/,//匹配规则
     6         use: [        //用什么处理, 可以写多个loader
     7           { loader: "xxloader" }  //loader的路径,webpack内部会用require(loader的路径)来获取该loader函数
     8         ]
     9       }
    10     ]
    11   },

    练习: 自己手写一个简单的loader, 实现"变量 a = 1" 跑起来, 也就是将 "变量" 换成 "var";

     1. loader本质就是一个函数, 所以创建一个文件, 导出一个函数. 注意不能用es6导出, 要用commonjs导出,

         因为此时是nodejs运行环境.

     

    1 //myloader.js
    2 
    3 module.exports = function(sourcecode){ //参数表示该loader处理前的源码
    4   console.log(sourcecode);
    5      return sourcecode.replace(/变量/g,"var");//return结果就是该loader处理后的源码
    6 }

    2. 配置webpack.config.js中配置该loader

     1 //webpack.config.js
     2 const path = require("path");
     3 module.exports = {
     4   module: {
     5     rules: [
     6       {
     7         test: /.js$/,//匹配规则
     8         use: [        //用什么处理, 可以写多个loader
     9           { loader: "./src/myloader/myloader.js" }  //loader的路径
    10         ]
    11       }
    12     ]
    13   },
    14   devtool: "source-map",
    15   mode: "development",
    16   entry: {
    17     index: "./src/index.js"
    18   },
    19   output: {
    20     filename: "[name].[chunkhash:5].js",
    21     path: path.resolve("./", "output")
    22   }
    23 
    24 }

    这样配置后, 就可以针对所有js文件进行转换了.

    loader的参数: 有两种写法, 一种是写在options里, 一种可以直接写在loader后用?xx=yy这种形式;

    module.exports = {
      module: {
        rules: [
          {
            test: /.js$/,//匹配规则
            use: [        //用什么处理, 可以写多个loader
    // 第一种:
              // { loader: "./src/myloader/myloader.js" },  //loader的路径
    // 第二种:
              // {
              //   loader: "./src/myloader/myloader2.js",
              //   options:{
              //     changevalue: "我的吧"
              //   }
              // }
    // 第三种:
              {loader:"./src/myloader/myloader2.js?changevalue=我的吧"}
            ]
          }
        ]
      },
    1 //loader2.js 可以获取webpack.config.js中loader的配置
    2 const { getOptions } = require("loader-utils");
    3 
    4 module.exports = function (sourcecode) {
    5   const options = getOptions(this)
    6   console.log(options);
    7   var reg = new RegExp(options.changevalue, "g");
    8   return sourcecode.replace(reg, "var");
    9 }

    loader们的执行顺序, 从下往上, 从右向左.与加载顺序相反

  • 相关阅读:
    李超线段树 [Heoi2013]Segment
    [置顶] 九月半集训总结
    [置顶] 我想学学
    图论+前缀和 任(duty)
    模拟 飞(fly)
    入坑 可持久化线段树——主席树
    一次爆炸的联考
    HASH+平衡树 [JSOI2008]火星人prefix
    乱搞+STL平衡树 序列
    数学+图论 建造游乐场
  • 原文地址:https://www.cnblogs.com/dangdanghepingping/p/14495789.html
Copyright © 2011-2022 走看看