Webpack基础使用 + 高级配置【重点!】

http://xxpromise.gitee.io/webpack5-docs/senior/optimizePerformance.html#code-split

  • 笔记好评!!!!
  • 一定要把网址记好,真的nice!!!!

只是发博客记录一下,没有笔记的一门课程【感人/(ㄒoㄒ)/~~】,多看几遍受益匪浅

以下内容仅为记录,绝对没有翻阅笔记巴适

1-1 webpack基础使用+介绍

  1. 有哪些常见的 Loader?
    • file-loader:把文件输出到—个文件夹中,在代码中通过相对 URL 去引用输出的文件
    • url-loader:和 file-loader 类似,但是能在文件很小的情况下以 base64 的方式把文件内容注入到代码中去
    • source-map-loader:加载额外的 Source Map 文件,以方便断点调 试
    • image-loader:加载并且压缩图片文件
    • babel-loader:把 ES6 转换成 ES5
    • css-loader,style-loader,less-loader ,sass-loader, "stylus-loader:加载 CSS,支持模块化、压缩、文件导入等特性
    • style-loader:把 CSS 代码注入到 JavaScript 中,通过 DOM 操作 去加载 CSS。
    • eslint-loader:通过 ESLint 检查 JavaScript 代码
  2. 有哪些常见的 Plugin?
    • define-plugin:定义环境变量
    • html-webpack-plugin:简化 html文件创建
    • uglifyjs-webpack-plugin:通过 UglifyES 压缩 ES6 代码
    • webpack-parallel-uglify-plugin: 多核压缩,提高压缩速度
    • webpack-bundle-analyzer: 可视化 webpack 输出文件的体积
    • mini-css-extract-plugin: CSS 提取到单独的文件中,支持按需加 载
 // 提取css成单独文件
 new MiniCssExtractPlugin({
   // 定义输出文件名和目录
   filename: "static/css/main.css",
 }),
 - eslint-webpack-plugin
const ESLintWebpackPlugin = require("eslint-webpack-plugin");

  // 插件
  plugins: [
    // plugins的配置
    new ESLintWebpackPlugin({
      // 指定检查文件的根目录
      context: path.resolve(__dirname, "src"),
    }),
]
  • html-webpack-plugin
  1. Loader 和 Plugin 的不同?
    • 不同的作用:
      • Loader 直译为"加载器"。Webpack 将—切文件视为模块,但是 webpack 原生是只能解析 js文件,如果想将其他文件也打包的话,就会用到 loader 。 所以 Loader 的作用是让 webpack 拥有了加载和解析非 JavaScript文件的能力。
      • Plugin 直译为"插件"。Plugin 可以扩展 webpack 的功能,让 webpack 具有更多的灵活性。 在 Webpack 运行的生命周期中会广播出许多事 件,Plugin 可以监听这些事件,在合适的时机通过 Webpack 提供的
        API 改变输出结果。
    • 不同的用法:
      • Loader 在 module.rules 中配置,也就是说他作为模块的解析规则 而存在。 类型为数组,每⼀项都是⼀个 Object ,里面描述了对于 什么类型的文件 ( test ) ,使用什么加载( loader )和使用的参数 ( options )
      • Plugin在 plugins 中单独配置。类型为数组,每⼀项是⼀个 plugin 的实例,参数都通过构造函数传入。

1-2 webpack高级【相关问题整理+记录】

  1. 如何用webpack 来优化前端性能?

    • 用webpack 优化前端性能是指优化 webpack 的输出结果,让打包的最 终结果在浏览器运行快速高效。
    • 压缩代码:删除多余的代码、注释、简化代码的写法等等方式。可以 利用webpack 的 UglifyJsPlugin 和 ParallelUglifyPlugin 来压缩 JS文件, 利用 cssnano (css-loader?minimize) 来压缩 css
    • 利用CDN 加速: 在构建过程中,将引用的静态资源路径修改为 CDN 上 对应的路径 。
    • 可以利用webpack 对于 output 参数和各 loader 的 publicPath 参数来修改资源路径
    • TreeShaking: 将代码中永远不会走到的片段删除掉。可以通过在启 动 webpack 时追加参数 --optimize-minimize 来实现
    • Code Splitting: 将代码按路由维度或者组件分块(chunk),这样做 到按需加载,同时可以充分利用浏览器缓存提取公共第三方库:
    • SplitChunksPlugin 插件来进行公共模块抽取, 利用浏览器缓存可以长期缓存这些无需频繁变动的公共代码
  2. 如何提高webpack 的构建速度?

    • 多入口情况下,使用 CommonsChunkPlugin 来提取公共代码
    • 通过 externals 配置来提取常用库
    • 利用 DllPlugin 和 DllReferencePlugin 预编译资源模块 通过 DllPlugin 来对那些我们引用但是绝对不会修改的 npm 包来进行预 编译,再通过 DllReferencePlugin 将预编译的模块加载进来。
    • 使用 Happypack 实现多线程加速编译
    • 使用 webpack-uglify-parallel 来提升 uglifyPlugin 的压缩速 度。 原理上 webpack-uglify-parallel 采用了多核并行压缩来提升 压缩速度
    • 使用 Tree-shaking 和 Scope Hoisting 来剔除多余代码
  3. Babel 的原理是什么?

    • babel 的转译过程也分为三个阶段,这三步具体是:
    • 解析 Parse: 将代码解析生成抽象语法树 (AST) ,即词法分析与语 法分析的过程;
    • 转换 Transform: 对于 AST 进行变换⼀系列的操作,babel 接受得 到 AST 并通过 babel-traverse 对其进行遍历,在此过程中进行添 加、更新及移除等操作;
    • 生成 Generate: 将变换后的 AST 再转换为 JS 代码, 使用到的模 块是 babel-generator。

在这里插入图片描述

1-3 Webpack与css工程化

  1. 以下三个方向都是时下比较流行的、普适性非常好的 CSS 工程化实 践:

    • 预处理器:Less、 Sass 等;
    • 重要的工程化插件: PostCss,Webpack loader 等 。
  2. 基于这三个方向,可以衍生出一些具有典型意义的子问题,这里我们 逐个来看:

    • 预处理器:为什么要用预处理器?它的出现是为了解决什么问 题?
    • 预处理器,其实就是 CSS 世界的“轮子” 。预处理器支持我们写一 种类似 CSS、但实际并不是 CSS 的语言,然后把它编译成 CSS 代码:
  3. 那为什么写 CSS 代码写得好好的,偏偏要转去写“类 CSS”呢?这 就和本来用 JS 也可以实现所有功能,但最后却写 React 的 jsx 或 者 Vue 的模板语法一样——为了爽!要想知道有了预处理器有多爽, 首先要知道的是传统 CSS 有多不爽。随着前端业务复杂度的提高, 前端工程中对 CSS 提出了以下的诉求:

    • 宏观设计上:我们希望能优化 CSS 文件的目录结构,对现有的 CSS 文件实现复用;
    • 编码优化上:我们希望能写出结构清晰、简明易懂的 CSS,需要它 具有一 目了然的嵌套层级关系,而不是无差别的一铺到底写法;我们 希望它具有变量特征、计算能力、循环能力等等更强的可编程性,这 样我们可以少写一些无用的代码;
    • 可维护性上:更强的可编程性意味着更优质的代码结构,实现复用 意味着更简单的目录结构和更强的拓展能力,这两点如果能做到,自 然会带来更强的可维护性。
  4. 这三点是传统 CSS 所做不到的,也正是预处理器所解决掉的问题。 预处理器普遍会具备这样的特性:

    • 嵌套代码的能力,通过嵌套来反映不同 css 属性之间的层级关系 ; 支持定义 css 变量;
    • 提供计算函数;允许对代码片段进行 extend 和 mixin;
    • 支持循环语句的使用;支持将 CSS 文件模块化,实现复用。
  5. PostCss:PostCss 是如何工作的?我们在什么场景下会使用 PostCss?

    • PostCss 仍然是一个对 CSS 进行解析和处理的工具,它会对 CSS 做 这样的事情:
    • 它和预处理器的不同就在于,预处理器处理的是 类 CSS,而 PostCss 处理的就是 CSS 本身。
    • Babel 可以将高版本的 JS 代码转换为低版 本的 JS 代码。PostCss 做的是类似的事情:它可以编译尚未被浏览 器广泛支持的先进的 CSS 语法,还可以自动为一些需要额外兼容的 语法增加前缀。
    • 更强的是,由于 PostCss 有着强大的插件机制,支持各种各样的扩展,极大地强化了 CSS 的能力。
  6. PostCss 在业务中的使用场景非常多:
    提高 CSS 代码的可读性:PostCss 其实可以做类似预处理器能做的 工作;

    • 当 我 们 的 CSS 代 码 需 要 适 配 低 版 本 浏 览 器 时 , PostCss 的Autoprefixer 插件可以帮助我们自动增加浏览器前缀;
    • 允许我们编写面向未来的 CSS:PostCss 能够帮助我们编译 CSS next 代码;
  7. Webpack 能处理 CSS 吗?如何实现?
    Webpack 能处理 CSS 吗:

    • Webpack 在裸奔的状态下,是不能处理 CSS 的,Webpack 本身是一 个面向 JavaScript 且只能处理 JavaScript 代码的模块化打包工 具;
    • Webpack 在 loader 的辅助下,是可以处理 CSS 的。
  8. 如何用 Webpack 实现对 CSS 的处理:

    • Webpack 中操作 CSS 需要使用的两个关键的 loader:css-loader 和 style-loader
    • 每个 loader 都做了什么事情:
      • css-loader:导入 CSS 模块,对 CSS 代码进行编译处理;
      • style-loader:创建 style 标签,把 CSS 内容写入标签。
      • 在实际使用中,css-loader 的执行顺序一定要安排在 style-loader 的前面。因为只有完成了编译过程,才可以对 css 代码进行插入; 若提前插入了未编译的代码,那么 webpack 是无法理解这坨东西的, 它会无情报错。
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具,可以将多个模块打包成一个或多个静态资源文件。Vue 是一个流行的 JavaScript 框架,用于构建用户界面。 在将 Vue 项目打包时,可以使用 Webpack 来生成公共的配置文件,以便在不同的环境中共享和重复使用。 首先,可以创建一个名为 `webpack.base.config.js` 的公共配置文件。该文件会包含一些通用的配置,例如入口文件、输出路径、加载器、插件等。通常,会将所有环境共有的配置项放在这个文件中。例如: ```javascript module.exports = { entry: './src/main.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js', }, module: { rules: [ { test: /\.vue$/, loader: 'vue-loader', }, // 其他加载器规则... ], }, plugins: [ new VueLoaderPlugin(), // 其他插件... ], }; ``` 然后,在不同的环境配置文件(如 `webpack.dev.config.js`、`webpack.prod.config.js` 等)中,可以通过引入公共配置文件并进行合并来继承公共的配置。例如: ```javascript const merge = require('webpack-merge'); const baseConfig = require('./webpack.base.config.js'); module.exports = merge(baseConfig, { // 为开发环境或生产环境添加额外的配置项 }); ``` 这样,可以在不同的环境中共享公共配置,减少重复工作,并且方便管理和维护项目。 最后,可以使用命令行或配置文件来指定要使用的环境配置文件,以便在打包时根据不同的环境生成不同的配置。 通过使用 Webpack 生成公共配置文件,可以更好地组织和管理 Vue 项目的打包配置,提高开发效率,并且方便进行项目的扩展和维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值