Skip to content

loaders专题文档

  • 什么是loader

webpack的本质是一个模块打包工具,所以webpack默认处理JS文件,不能处理其他文件, 因为其他文件中没有模块的概念,但是在企业开发中我们除了需要对JS进行打包以外, 还有可能需要对图片/CSS进行打包,所以为了能够让webpack对其他文件类型打包, 在打包之前就必须将其他类型文件转换为webpack能够识别处理的模块, 用于将其他类型文件转换为webpack能够识别处理模块的工具我们就称之为loader

loader特点

  • 单一原则,一个loader只做一件事情
  • 多个loader会按照从右至左(从下至上)的顺序执行,所以需要先执行style-loader再执行css-loader

css-loader

介绍

和图片一样webpack默认不能处理CSS文件,所以也需要借助loader将CSS文件转成webpack能处理的类型

安装

shell
npm install --save-dev css-loader
npm install style-loader --save-dev

用法

js
import 'file.css';
module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        // css-loader 解析css中的@import依赖关系
        // style-loader 将webpack处理之后的内容插入到HTML的HEAD当中
        use: [ 'style-loader', 'css-loader' ]
      }
    ]
  }
}

模块化

导入的css只想在当前的模块使用,需要设置相应的规则

js
module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        // css-loader 解析css中的@import依赖关系
        // style-loader 将webpack处理之后的内容插入到HTML的HEAD当中
        use: [ 
          {
            loader:"style-loader"
          },{
            loader:"css-loader",
            options:{
              modules:true
            }
          }
        ]
      }
    ]
  }
}

url-loader

安装

shell
npm install --save-dev url-loader

使用

会将图片转成base64

js

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpg|gif)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              /* 指定图片限制的大小
              // 如果被打包的图片超过了限制,会打包成为一个文件
              // 如果未超过限制大小,就会将图片转成base64
              // 100k = 1024 * 100
              比较小的图片转成base64可以提升网页性能,对于比较大的文件,转成base64不会提升网页的性能,
              因为图片比较大,转换的字符串也比较多,网页体积变大,访问的速度变大
              */
              limit: 8192,
              // 配置扩展名称
              name:'[name].[ext]',
              // 配置输出路径
              outputPath:"images/"
            }
          }
        ]
      }
    ]
  }
}

file-loader

如何使用loader

webpack中的loader都是用NodeJS编写的,但是在企业开发中我们完全没必要自己编写, 因为已经存在大神编写好的loader

  • 先安装 file-loader
shell
    npm install --save-dev file-loader
js
module.exports = {
  "module":{
    rules:[
      {
        // 正则表达式
        test:/\.(png|jpg|gif)$/,
        use:[
          {
            loader:'file-loader',
            options:{}
          }
        ]
      }
    ]
  }
}
  • 默认情况下默认通过MD5加密

file_loader配置项

在options进行配置

js
module.exports={
  "module":{
    // 省略其他不重要的信息
    use:[
          {
              loader:"file-loader",
              options:{
                // 配置扩展名称
                name:'[name].[ext]',
                // 配置输出路径
                outputPath:"images/",
                // 指定图片的路径http://oss.aibayanyu.cn/images/图片名称
                publicPath:"http://oss.aibayanyu.cn/images/"
              }
          }
    ]  
  }
}

less-loader

自动将less转换为css

安装

npm install --save-dev less-loader less

使用

js
// webpack.config.js
module.exports = {
    module: {
        rules: [{
            test: /\.less$/,
            use: [{
                loader: "style-loader" // 3.creates style nodes from JS strings
            }, {
                loader: "css-loader" // 2.translates CSS into CommonJS
            }, {
                loader: "less-loader" // 1.compiles Less to CSS
            }]
        }]
    }
}

scss-loader

将scss-loader转换为css

安装

shell
npm install sass-loader node-sass webpack --save-dev

使用

js

// webpack.config.js
module.exports = {
  module: {
    rules: [{
      test: /\.scss$/,
      use: [{
          loader: "style-loader" // 3. 将 JS 字符串生成为 style 节点
      }, {
          loader: "css-loader" // 2. 将 CSS 转化成 CommonJS 模块
      }, {
          loader: "sass-loader" // 1.将 Sass 编译成 CSS
      }]
    }]
  }
};

postcss-loader

什么是postcss

  • 与less和scss不同,他不是CSS预处理器
  • postCSS是一款使用插件去转换CSS的工具
  • postCSS有许多非常好用的插件

例如:

  • autoprefixer(自动补全浏览器前缀)
  • postcss-pxtorem(将px转为rem)

安装

shell
npm i -D postcss-loader

使用

js
module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [ 'style-loader','css-loader', 'postcss-loader' ]
      }
    ]
  }
}

安装插件

shell
npm i -D autoprefixer

配置postcss-loader

在css-loader or less-loader or sass-loader之前添加postcss-loader

创建postcss.config.js

js
module.exports = {
  plugins:{
    "autoprefixer":{
      // 兼容浏览器
      overrideBrowserslist:[
      "ie8 >= 8",
        "Firefox >= 3.5",
      "Chrome >= 35",
      "opera >= 11.5"
      ]
    }   
  }
}

安装插件

shell
npm install postcss-pxtorem -D

配置

js
module.exports = {
  plugins:{
    "autoprefixer":{
      // 兼容浏览器
      overrideBrowserslist:[
      "ie8 >= 8",
        "Firefox >= 3.5",
      "Chrome >= 35",
      "opera >= 11.5"
      ]
    },
    "postcss-pxtorem":{
      rootValue:100,//元素字体大小
      // 可以从px更改到rem的属性
      // propList:["height"]
      propList:['*']//默认所有的属性都需要打包
    }
  }
}

打包iconfont

使用

js
module.exports = {
  module: {
    rules: [
      {
        test: /\.(eot|json|svg|ttf|woff|woff2)$/,
        use: [
           { 
            loader:'file-loader',
            options:{
              // 指定打包后文件名称
              name:"[name].[ext]",
              // 指定宝宝后文件存放目录
              outputPath:'font/'
            }   
           }
        ]
      }
    ]
  }
}

Released under the MIT License.