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

    webpack的构建流程

    image

    • 初始化参数:从配置文件和 Shell 语句中读取与合并参数,得出最终的参数。
    • 开始编译:用上一步得到的参数初始化 Compiler 对象,加载所有配置的插件,执行对象的 run - 方法开始执行编译。
    • 确定入口:根据配置中的 entry 找出所有的入口文件。
    • 编译模块:从入口文件出发,调用所有配置的 Loader 对模块进行翻译,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理。
    • 完成模块编译:在经过第 4 步使用 Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系。
    • 输出资源:根据入口和模块之间的依赖关系,组装成一个个包含多个模块的 Chunk,再把每个 Chunk 转换成一个单独的文件加入到输出列表,这步是可以修改输出内容的最后机会。
    • 输出完成:在确定好输出内容后,根据配置确定输出的路径和文件名,把文件内容写入到文件系统。

    一.安装

    npm install webpack webpack-cli -D // 局部安装
    

    二.loader

    三.css-loader

    npm install css-loader -D

    四.style-loader

    npm install style-loader -D

    五.less-loader

    npm install less less-loader --D

    • importLoaders的数量默认是0,意思是一个加载器都不用,1的意思是用postcss-loader加载器,2的意思是用postcss-loaders和sass-loader加载器

    • 这里的importLoaders: 2 是在css-loader 之后指定2个数量的loader(即 postcss-loader 和 less-loader)来处理import进来的资源

          {
            test: /.less$/,
            use: [
              "style-loader",
              {
                loader: "css-loader",
                options: {
                  importLoaders: 2 // @import的css文件,回头能被前面的"less-loader"、"postcss-loader"处理
                  // 0 => no loaders (default);
                  // 1 => postcss-loader;
                  // 2 => postcss-loader, sass-loader
                }
              },
              "postcss-loader",
              "less-loader"
            ]
          }
    

    六.PostCss

    • PostCSS是一个通过JavaScript来转换样式的工具;
    • 这个工具可以帮助我们进行一些CSS的转换和适配,比如自动添加浏览器前缀、css样式的重置;
    • 但是实现这些功能,我们需要借助于PostCSS对应的插件;

    npm install postcss-loader postcss-preset-env --D

    ppostcss-preset-env也是一个postcss的插件;

    • 它可以帮助我们将一些现代的CSS特性,转成大多数浏览器认识的CSS,并且会根据目标浏览器或者运行时环境
      添加所需的polyfill;
    • 也包括会自动帮助我们添加autoprefixer(所以相当于已经内置了autoprefixer);

    写法1:

    写法2:

    七.file-loader 图片处理(八. url-loader可以代替 这一步)

    npm install file-loader -D

    • file-loader的作用就是帮助我们处理import/require()方式引入的一个文件资源,并且会将它放到我们输出的文
      件夹中;

    配置rule

    八.设置文件名字 与 文件存放位置

    1. 命名规则:

    2.重构 图片输出的名字 和 位置

          {
            test: /.(jpe?g|png|gif|svg)$/,
            use: {
              loader: "file-loader",
              options: {
                name: "img/[name]_[hash:6][ext]",// img路径 + 图片本身名字 + hash6位数 + 文件扩展名
                outputPath: "img",// 输出路径
              }
            }
          }
    

    九.url-loader(可以代替 第七步 file-loader)

    npm install url-loader -D

    1. 默认情况下所有图片都会被打包成 base64:

    2. 但是开发中我们往往是小的图片需要转换,但是大的图片直接使用图片即可

    • 这是因为小的图片转换base64之后可以和页面一起被请求,减少不必要的请求过程;
    • 而大的图片也进行转换,反而会影响页面的请求速度;
    1. 那么,我们如何可以限制哪些大小的图片转换和不转换呢
    • url-loader有一个options属性limit,可以用于设置转换的限制;
    • 下面代码,超过100k不会被转成base64

    十.webpack5 处理图片 (可以代替 第九步和第七步)

    asset module type --- 资源模块

    资源模块(asset module)是一种模块类型,它允许使用资源文件(字体,图标等)而无需配置额外 loader。

    也就是说 如果是webpack5, 就不用下载 file-loader, url-loader了。因为里面自带

    使用方法:

    十一. 处理字体图标

    方法1:

    ​webpack4,依旧可以通过(第七步) file-loader进行打包:

    方法2:

    通过 webpack5 的 asset module type --- 资源模块

  • 相关阅读:
    IDEA创建maven项目
    Error:java:错误:不支持发行版本 5(或写着其他版本的~)
    IDEA配置maven
    IDEA、maven3.6.3安装、环境配置(windows10)
    MySQL(版本8.0.19)服务的启动/停止、登录/登出、修改密码
    Struts2表单提交的中文字符数据用hibernate存储在数据库中是乱码的问题。
    (异常分析)Dispatcher initialization failed Caused by: Action class [*] not found
    (异常分析)实例化Configuration 的时候提示:Cannot instantiate the type Configuration
    (转)(异常分析) org.hibernate.MappingException: entity class not found
    (转)not found while looking for property错误
  • 原文地址:https://www.cnblogs.com/cl1998/p/15285418.html
Copyright © 2011-2022 走看看