zoukankan      html  css  js  c++  java
  • webpack之loader

    作用

    loader是一种打包的方案,webpack默认只识别js结尾的文件,当遇到其他格式的文件后,webpack并不知道如何去处理。此时,我们可以定义一种规则,告诉webpack当他遇到某种格式的文件后,去求助于相应的loader。
     
    npm install file-loader -D

    webpack.config.js

    const path = require('path');
    
    module.exports = {
      // 模式:可选为:development, 默认为:production
      mode: 'development',
      // 源代码文件夹:src
      entry: {
        main: './src/index.js' // 入口文件
      },
      module: {
        rules: [{
            test: /.jpg$/,
            use: {
                loader: 'file-loader'
            }
        }]
      },
      output: {
        filename: 'bundle.js',  // 文件名
        path: path.resolve(__dirname, 'dist')  // 文件夹
      }
    }

    index.js

    import pic from './lee.jpg';
    
    var img = new Image();
    img.src = pic;
    
    var root = document.getElementById('root');
    root.append(img);

    打包静态资源

    图片

    file-loader

    const path = require('path');
    
    module.exports = {
      mode: 'production',
      entry: {
        main: './src/index.js' // 入口文件
      },
      module: {
        rules: [{
            test: /.(jpg|png|gif)$/,
            use: {
                loader: 'file-loader',
                options: { // 配置
                  name: '[name].[ext]', // 以源文件名字及格式输出
                  outputPath: 'images/' // 输出到images文件夹下
                }
            }
        }]
      },
      output: {
        filename: 'bundle.js',  // 文件名
        path: path.resolve(__dirname, 'dist')  // 文件夹
      }
    }

    url-loader

    url-loader和file-loader都可以打包图片,区别是url-loader会将图片以base64打包到js文件中,当图片过大时,打包的js文件也会过大。所以最佳实践是:将小图片打包为base64,大于某个值的文件打包为图片。如果在配置中不加limit,所有图片都会打包为base64。
    下面案例的意思是:超过10kb的文件打包为图片,小于10kb的打包为base64

    npm install url-loader --save-dev
    const path = require('path');
    
    module.exports = {
      mode: 'production',
      entry: {
        main: './src/index.js' // 入口文件
      },
      module: {
        rules: [{
            test: /.(jpg|png|gif)$/,
            use: {
                loader: 'url-loader',
                options: { // 配置
                  name: '[name].[ext]', // 以源文件名字及格式输出
                  outputPath: 'images/', // 输出到images文件夹下
                  limit: 10240 // 超过10kb打包为图片
                }
            }
        }]
      },
      output: {
        filename: 'bundle.js',  // 文件名
        path: path.resolve(__dirname, 'dist')  // 文件夹
      }
    }

    字体

    file-loader

    const path = require('path');
    
    module.exports = {
      mode: 'production',
      entry: {
        main: './src/index.js' // 入口文件
      },
      module: {
        rules: [{
            test: /.(eot|ttf|svg)$/,
            use: {
                loader: 'file-loader'          
            }
        }]
      },
      output: {
        filename: 'bundle.js',  // 文件名
        path: path.resolve(__dirname, 'dist')  // 文件夹
      }
    }

    样式

    loader 的执行顺序为从后向前

    style-loader css-loader

    css-loader会理清多个css文件之间的引用关系,最后合并为一个。
    style-loader会将css样式挂载到head的style标签中

    npm install style-loader css-loader -D

    postcss-loader

    为样式加上厂商浏览器前缀

    npm i -D postcss-loader
    const path = require('path');
    
    module.exports = {
      mode: 'production',
      entry: {
        main: './src/index.js' // 入口文件
      },
      module: {
        rules: [{
            test: /.(jpg|png|gif)$/,
            use: {
                loader: 'url-loader',
                options: { // 配置
                  name: '[name].[ext]', // 以源文件名字及格式输出
                  outputPath: 'images/', // 输出到images文件夹下
                  limit: 10240 // 超过10kb打包为图片
                }
            }
        },{
            test: /.scss$/,
            use: [
              'style-loader',
              'css-loader',
              'sass-loader',
              'postcss-loader'
            ]
        }]
      },
      output: {
        filename: 'bundle.js',  // 文件名
        path: path.resolve(__dirname, 'dist')  // 文件夹
      }
    }

    autoprefixer插件

    npm install autoprefixer -D

    postcss.config.js

    module.exports = {
        plugins: [
          require('autoprefixer')
        ]
    }





    链接:https://www.jianshu.com/p/ad99b2479bee

  • 相关阅读:
    EM and GMM(Code)
    EM and GMM(Theory)
    安装Sphere v2.7 遇到的问题
    pyqt的 .ui 转换为 .py 后的操作注意事项
    SVM入门(一)
    关于范数的理解
    快速排序的C语言实现
    QT编程环境搭建
    flex布局左边固定,右边自适应,右边内容超出会影响布局
    未知宽高的div怎么垂直水平居中
  • 原文地址:https://www.cnblogs.com/hjsblogs/p/13516313.html
Copyright © 2011-2022 走看看