 《玩转webpack》第七章 原理篇: 编写 Loader 和插件}; module.exports = { ... plugins: [new DemoPlugin({ name: "demo" })] }; 插件中如何获取传递的参数? 通过插件的构造函数进行获取 module.exports = class MyPlugin { constructor(options) { this.options = options; }0 码力 | 29 页 | 4.37 MB | 1 年前3 《玩转webpack》第七章 原理篇: 编写 Loader 和插件}; module.exports = { ... plugins: [new DemoPlugin({ name: "demo" })] }; 插件中如何获取传递的参数? 通过插件的构造函数进行获取 module.exports = class MyPlugin { constructor(options) { this.options = options; }0 码力 | 29 页 | 4.37 MB | 1 年前3
 《玩转webpack》加餐:webpack5专题和 bundless 的差异 02 Vite 的构建原理 03 Vite 发布 2.0 版本 更早实践 bundless 的⼯具:Snowpack 真的可以不⽤打包吗? 浏览器对 ESM 的⽀持情况 各浏览器在 HTTP/1.1 协议下的最大并行请求数限制 HTTP/1.1 的请求数限制 HTTP/2 越来越多的应⽤在主流⽹站 bundle bundless a.js b.js 静态⽂件托管服务 文件路径:src/node/server/index.ts 处理裸导⼊(bare import)的模块路径,eg: import react from 'react'; 浏览器(只有相对路径和绝对路径)无法识别,因 此需要重写模块路径 Vite 打包流程 – 重写模块路径 文件路径:src/node/server/serverPluginModuleRewrite.ts 的开头补上一个 /@modules 的标识符。 如:import React from "/@modules/@pika/react/source.development.js" 相对路径转绝对路径,方便浏览器请求。 补齐文件扩展名和经常被省略的 index.xxx 如:import a from ’/src/a/index.js’ 给非 js 类型(js 类型:如 js(x)/ts(x)/vue)的文件地址加上0 码力 | 40 页 | 12.03 MB | 1 年前3 《玩转webpack》加餐:webpack5专题和 bundless 的差异 02 Vite 的构建原理 03 Vite 发布 2.0 版本 更早实践 bundless 的⼯具:Snowpack 真的可以不⽤打包吗? 浏览器对 ESM 的⽀持情况 各浏览器在 HTTP/1.1 协议下的最大并行请求数限制 HTTP/1.1 的请求数限制 HTTP/2 越来越多的应⽤在主流⽹站 bundle bundless a.js b.js 静态⽂件托管服务 文件路径:src/node/server/index.ts 处理裸导⼊(bare import)的模块路径,eg: import react from 'react'; 浏览器(只有相对路径和绝对路径)无法识别,因 此需要重写模块路径 Vite 打包流程 – 重写模块路径 文件路径:src/node/server/serverPluginModuleRewrite.ts 的开头补上一个 /@modules 的标识符。 如:import React from "/@modules/@pika/react/source.development.js" 相对路径转绝对路径,方便浏览器请求。 补齐文件扩展名和经常被省略的 index.xxx 如:import a from ’/src/a/index.js’ 给非 js 类型(js 类型:如 js(x)/ts(x)/vue)的文件地址加上0 码力 | 40 页 | 12.03 MB | 1 年前3
 《玩转webpack》 第三章 基础篇 Webpack 进阶用法1%", "iOS 7"] + }) + ] + } + } ] } ] } }; 浏览器器的分辨率 CSS 媒体查询实现响应式布局 缺陷:需要写多套适配样式代码 @media screen and (max-width: 980px) { .header { width: 900px; //将所有的style标签合并成一个 } }, "css-loader", "sass-loader" ], }, ] }, }; 多⻚页⾯面应⽤用(MPA)概念 每⼀一次⻚页⾯面跳转的时候,后台服务器器都会给返回⼀一个新的 html ⽂文档, 这种类型的⽹网站也就是多⻚页⽹网站,也叫做多⻚页应⽤用。 多⻚页⾯面打包基本思路路 module.exports = { entry: { index: 渲染: HTML + CSS + JS + Data -> 渲染后的 HTML 服务端: 所有模板等资源都存储在服务端 内⽹网机器器拉取数据更更快 ⼀一个 HTML 返回所有数据 浏览器器和服务器器交互流程 ⽤用户层现 客户端渲染 vs 服务端渲染 ����� ����� �� ����(HTML, ���) 1��� ���� HTML&������ 1�����HTML&��0 码力 | 69 页 | 4.33 MB | 1 年前3 《玩转webpack》 第三章 基础篇 Webpack 进阶用法1%", "iOS 7"] + }) + ] + } + } ] } ] } }; 浏览器器的分辨率 CSS 媒体查询实现响应式布局 缺陷:需要写多套适配样式代码 @media screen and (max-width: 980px) { .header { width: 900px; //将所有的style标签合并成一个 } }, "css-loader", "sass-loader" ], }, ] }, }; 多⻚页⾯面应⽤用(MPA)概念 每⼀一次⻚页⾯面跳转的时候,后台服务器器都会给返回⼀一个新的 html ⽂文档, 这种类型的⽹网站也就是多⻚页⽹网站,也叫做多⻚页应⽤用。 多⻚页⾯面打包基本思路路 module.exports = { entry: { index: 渲染: HTML + CSS + JS + Data -> 渲染后的 HTML 服务端: 所有模板等资源都存储在服务端 内⽹网机器器拉取数据更更快 ⼀一个 HTML 返回所有数据 浏览器器和服务器器交互流程 ⽤用户层现 客户端渲染 vs 服务端渲染 ����� ����� �� ����(HTML, ���) 1��� ���� HTML&������ 1�����HTML&��0 码力 | 69 页 | 4.33 MB | 1 年前3
 《玩转webpack》 第二章 基础篇: webpack 基础用法+ "watch": "webpack --watch" }, "keywords": [], "author": "", "license": "ISC" } 唯⼀一缺陷:每次需要⼿手动刷新浏览器器 ⽂文件监听的原理理分析 轮询判断⽂文件的最后编辑时间是否变化 某个⽂文件发⽣生了了变化,并不不会⽴立刻告诉监听者,⽽而是先缓存起来,等 aggregateTimeout module.export ”dev": "webpack-dev-server --open" }, "keywords": [], "author": "", "license": "ISC" } WDS 不不刷新浏览器器 WDS 不不输出⽂文件,⽽而是放在内存中 使⽤用 HotModuleReplacementPlugin插件 热更更新:使⽤用 webpack-dev-middleware const express WDM 将 webpack 输出的⽂文件传输给服务器器 适⽤用于灵活的定制场景 热更更新的原理理分析 Webpack Compile: 将 JS 编译成 Bundle HMR Server: 将热更更新的⽂文件输出给 HMR Rumtime Bundle server: 提供⽂文件在浏览器器的访问 HMR Rumtime: 会被注⼊入到浏览器器, 更更新⽂文件的变化 bundle.js:0 码力 | 41 页 | 2.52 MB | 1 年前3 《玩转webpack》 第二章 基础篇: webpack 基础用法+ "watch": "webpack --watch" }, "keywords": [], "author": "", "license": "ISC" } 唯⼀一缺陷:每次需要⼿手动刷新浏览器器 ⽂文件监听的原理理分析 轮询判断⽂文件的最后编辑时间是否变化 某个⽂文件发⽣生了了变化,并不不会⽴立刻告诉监听者,⽽而是先缓存起来,等 aggregateTimeout module.export ”dev": "webpack-dev-server --open" }, "keywords": [], "author": "", "license": "ISC" } WDS 不不刷新浏览器器 WDS 不不输出⽂文件,⽽而是放在内存中 使⽤用 HotModuleReplacementPlugin插件 热更更新:使⽤用 webpack-dev-middleware const express WDM 将 webpack 输出的⽂文件传输给服务器器 适⽤用于灵活的定制场景 热更更新的原理理分析 Webpack Compile: 将 JS 编译成 Bundle HMR Server: 将热更更新的⽂文件输出给 HMR Rumtime Bundle server: 提供⽂文件在浏览器器的访问 HMR Rumtime: 会被注⼊入到浏览器器, 更更新⽂文件的变化 bundle.js:0 码力 | 41 页 | 2.52 MB | 1 年前3
 Gulp 入门指南+ C ) 后面的章节中如果代码中存在 gulp.watch 并在命令行运行了 gulp 则需要使用 Ctrl + C 退出任务。 npm 模块管理器 如果你了解 npm 则跳过此章节 若你不了解npm 请阅读 npm模块管理器 安装 gulp npm 是 node 的包管理工具,可以利用它安装 gulp 所需的包。(在安装 node 时已经自动安装了 npm) 在命令行输入 gulp-autoprefixer 并将之前所有章节的内容组合起来编写一个前端项目所需的 gulp 代码。 你可以在 nimojs/gulp-demo 查看完整代码。 若你不了解npm 请务必阅读 npm模块管理器 package.json 如果你熟悉 npm 则可以利用 package.json 保存所有 npm install --save-dev gulp-xxx 模块依赖和 模块版本。 在命令行输入 }) }) gulp.task('default', ['watchjs','watchcss']) gulp-autoprefixer autoprefixer 解析 CSS 文件并且添加浏览器前缀到CSS规则里。 通过示例帮助理解 autoprefixer 处理前: .demo { display:flex; } autoprefixer 处理后: .demo {0 码力 | 36 页 | 275.87 KB | 1 年前3 Gulp 入门指南+ C ) 后面的章节中如果代码中存在 gulp.watch 并在命令行运行了 gulp 则需要使用 Ctrl + C 退出任务。 npm 模块管理器 如果你了解 npm 则跳过此章节 若你不了解npm 请阅读 npm模块管理器 安装 gulp npm 是 node 的包管理工具,可以利用它安装 gulp 所需的包。(在安装 node 时已经自动安装了 npm) 在命令行输入 gulp-autoprefixer 并将之前所有章节的内容组合起来编写一个前端项目所需的 gulp 代码。 你可以在 nimojs/gulp-demo 查看完整代码。 若你不了解npm 请务必阅读 npm模块管理器 package.json 如果你熟悉 npm 则可以利用 package.json 保存所有 npm install --save-dev gulp-xxx 模块依赖和 模块版本。 在命令行输入 }) }) gulp.task('default', ['watchjs','watchcss']) gulp-autoprefixer autoprefixer 解析 CSS 文件并且添加浏览器前缀到CSS规则里。 通过示例帮助理解 autoprefixer 处理前: .demo { display:flex; } autoprefixer 处理后: .demo {0 码力 | 36 页 | 275.87 KB | 1 年前3
 《玩转webpack》第五章 进阶篇: webpack 构建速度和体积优化策略API Imagemin的优点分析 可以引入更多第三方优化插件,例如pngquant 有很多定制选项 可以处理多种图片格式 Imagemin的压缩原理 pngquant: 是一款PNG压缩器,通过将图像转换为具有alpha通道(通常比24/32位PNG 文件小60-80%)的更高效的8位PNG格式,可显著减小文件大小。 pngcrush:其主要目的是通过尝试不同的压缩级别和PNG过滤方法来降低PNG CSS 如何删除掉? uncss: HTML 需要通过 jsdom 加载,所有的样式通过PostCSS解析,通过 document.querySelector 来识别在 html 文件里面不存在的选择器 PurifyCSS: 遍历代码,识别已经用到的 CSS class 在 webpack 中如何使用 PurifyCSS? 使用 purgecss-webpack-plugin 和 mini-css-extract-plugin com/FullHuman/purgecss-webpack-plugin 构建体积优化:动态 Polyfill babel-polyfill 打包后体积:88.49k,占比 29.6% Promise 的浏览器支持情况 构建体积优化:动态 Polyfill Polyfill Service原理 识别 User Agent,下发不同的 Polyfill 构建体积优化:如何使用动态 Polyfill service0 码力 | 36 页 | 8.13 MB | 1 年前3 《玩转webpack》第五章 进阶篇: webpack 构建速度和体积优化策略API Imagemin的优点分析 可以引入更多第三方优化插件,例如pngquant 有很多定制选项 可以处理多种图片格式 Imagemin的压缩原理 pngquant: 是一款PNG压缩器,通过将图像转换为具有alpha通道(通常比24/32位PNG 文件小60-80%)的更高效的8位PNG格式,可显著减小文件大小。 pngcrush:其主要目的是通过尝试不同的压缩级别和PNG过滤方法来降低PNG CSS 如何删除掉? uncss: HTML 需要通过 jsdom 加载,所有的样式通过PostCSS解析,通过 document.querySelector 来识别在 html 文件里面不存在的选择器 PurifyCSS: 遍历代码,识别已经用到的 CSS class 在 webpack 中如何使用 PurifyCSS? 使用 purgecss-webpack-plugin 和 mini-css-extract-plugin com/FullHuman/purgecss-webpack-plugin 构建体积优化:动态 Polyfill babel-polyfill 打包后体积:88.49k,占比 29.6% Promise 的浏览器支持情况 构建体积优化:动态 Polyfill Polyfill Service原理 识别 User Agent,下发不同的 Polyfill 构建体积优化:如何使用动态 Polyfill service0 码力 | 36 页 | 8.13 MB | 1 年前3
 《玩转webpack》 第一章 基础篇: webpack 与构建发展简史开发商城项⽬目 08 基础篇:webpack 进阶⽤用法 03 为什什么需要构建⼯工具? 转换 ES6 语法 转换 JSX 压缩混淆 ES6 module 主流浏览器器⽀支持情况 图⽚片压缩 CSS 前缀补全/预处理理器器 前端构建演变之路路 ant + YUI Tool grunt gulp fis3 webpack parcel rollup 为什什么选择 webpack0 码力 | 17 页 | 690.93 KB | 1 年前3 《玩转webpack》 第一章 基础篇: webpack 与构建发展简史开发商城项⽬目 08 基础篇:webpack 进阶⽤用法 03 为什什么需要构建⼯工具? 转换 ES6 语法 转换 JSX 压缩混淆 ES6 module 主流浏览器器⽀支持情况 图⽚片压缩 CSS 前缀补全/预处理理器器 前端构建演变之路路 ant + YUI Tool grunt gulp fis3 webpack parcel rollup 为什什么选择 webpack0 码力 | 17 页 | 690.93 KB | 1 年前3
 《玩转webpack》第八章 实战篇: React 全家桶 和 webpack 开发商城项巨Native 渲染 · 弱⽹网优化 · 使⽤用离线包、PWA 等离线缓存技术 · Webview 优化 · 打开 Webview 的同时并⾏行行的加载⻚页⾯面数据 功能开发要点 · 浏览器器端: · 服务端: · MVC 开发⽅方式,数据库基于 Sequelize · Rest API ⻛风格 ·采⽤用 JWT 进⾏行行鉴权 ·组件化,组件颗粒度尽可能⼩小 ·直接复⽤用 b0 码力 | 25 页 | 5.67 MB | 1 年前3 《玩转webpack》第八章 实战篇: React 全家桶 和 webpack 开发商城项巨Native 渲染 · 弱⽹网优化 · 使⽤用离线包、PWA 等离线缓存技术 · Webview 优化 · 打开 Webview 的同时并⾏行行的加载⻚页⾯面数据 功能开发要点 · 浏览器器端: · 服务端: · MVC 开发⽅方式,数据库基于 Sequelize · Rest API ⻛风格 ·采⽤用 JWT 进⾏行行鉴权 ·组件化,组件颗粒度尽可能⼩小 ·直接复⽤用 b0 码力 | 25 页 | 5.67 MB | 1 年前3
 《玩转webpack》第六章 原理篇: 通过源码掌握 webpack 打包原理用来加载模块,返回 module.exports 动手实现一个简易的 webpack 可以将 ES6 语法转换成 ES5 的语法 可以分析模块之间的依赖关系 生成的 JS 文件可以在浏览器中运行 ·通过 babylon 生成AST ·通过 babel-core 将AST重新生成源码 · 通过 babel-traverse 的 ImportDeclaration 方法获取依赖属性0 码力 | 39 页 | 3.66 MB | 1 年前3 《玩转webpack》第六章 原理篇: 通过源码掌握 webpack 打包原理用来加载模块,返回 module.exports 动手实现一个简易的 webpack 可以将 ES6 语法转换成 ES5 的语法 可以分析模块之间的依赖关系 生成的 JS 文件可以在浏览器中运行 ·通过 babylon 生成AST ·通过 babel-core 将AST重新生成源码 · 通过 babel-traverse 的 ImportDeclaration 方法获取依赖属性0 码力 | 39 页 | 3.66 MB | 1 年前3
共 9 条
- 1













