 《玩转webpack》第七章 原理篇: 编写 Loader 和插件进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略 05 原理篇:通过源码掌握 webpack 打包原理 06 原理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项目 08 基础篇:webpack 进阶用法 03 一个最简单的 loader 代码结构 module.exports = function(source) webpack 中默认开启 loader 缓存 ·可以使用 this.cacheable(false) 关掉缓存 缓存条件: loader 的结果在相同的输入下有确定的输出 ·有依赖的 loader 无法使用缓存 loader 如何进行文件输出? 通过 this.emitFile 进行文件写入 const loaderUtils = require("loader-utils"); module { result.image; result.coordinates; result.properties; }); 插件的运行环境 插件没有像 loader 那样的独立运行环境 只能在 webpack 里面运行 插件的基本结构 基本结构: 插件使用: plugins: [ new MyPlugin() ] class MyPlugin { apply(compiler)0 码力 | 29 页 | 4.37 MB | 1 年前3 《玩转webpack》第七章 原理篇: 编写 Loader 和插件进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略 05 原理篇:通过源码掌握 webpack 打包原理 06 原理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项目 08 基础篇:webpack 进阶用法 03 一个最简单的 loader 代码结构 module.exports = function(source) webpack 中默认开启 loader 缓存 ·可以使用 this.cacheable(false) 关掉缓存 缓存条件: loader 的结果在相同的输入下有确定的输出 ·有依赖的 loader 无法使用缓存 loader 如何进行文件输出? 通过 this.emitFile 进行文件写入 const loaderUtils = require("loader-utils"); module { result.image; result.coordinates; result.properties; }); 插件的运行环境 插件没有像 loader 那样的独立运行环境 只能在 webpack 里面运行 插件的基本结构 基本结构: 插件使用: plugins: [ new MyPlugin() ] class MyPlugin { apply(compiler)0 码力 | 29 页 | 4.37 MB | 1 年前3
 《玩转webpack》第六章 原理篇: 通过源码掌握 webpack 打包原理进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略 05 原理篇:通过源码掌握 webpack 打包原理 06 原理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项目 08 基础篇:webpack 进阶用法 03 开始:从 webpack 命令行说起 ·开发环境: npm run dev 基础参数(entry设置、debug模式设置、watch监听设置、devtool设置) ·Module options: 模块参数,给 loader 设置扩展 ·Output options: 输出参数(输出路径、输出文件名称) ·Advanced options: 高级用法(记录设置、缓存设置、监听频率、bail等) ·Resolving options: 解析参数(alias 和 解析的文件后缀设置) 对象,然后执行构建流程 webpack-cli对配置文件和命令行参数进行转换最终生成配置选项参数 options Webpack 的本质 Webpack可以将其理解是一种基于事件流的编程范例,一系列的插件运行。 先看一段代码 class Compiler extends Tapable { // ... } class Compilation extends Tapable {0 码力 | 39 页 | 3.66 MB | 1 年前3 《玩转webpack》第六章 原理篇: 通过源码掌握 webpack 打包原理进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略 05 原理篇:通过源码掌握 webpack 打包原理 06 原理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项目 08 基础篇:webpack 进阶用法 03 开始:从 webpack 命令行说起 ·开发环境: npm run dev 基础参数(entry设置、debug模式设置、watch监听设置、devtool设置) ·Module options: 模块参数,给 loader 设置扩展 ·Output options: 输出参数(输出路径、输出文件名称) ·Advanced options: 高级用法(记录设置、缓存设置、监听频率、bail等) ·Resolving options: 解析参数(alias 和 解析的文件后缀设置) 对象,然后执行构建流程 webpack-cli对配置文件和命令行参数进行转换最终生成配置选项参数 options Webpack 的本质 Webpack可以将其理解是一种基于事件流的编程范例,一系列的插件运行。 先看一段代码 class Compiler extends Tapable { // ... } class Compilation extends Tapable {0 码力 | 39 页 | 3.66 MB | 1 年前3
 《玩转webpack》 第二章 基础篇: webpack 基础用法进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略略 05 原理理篇:通过源码掌握 webpack 打包原理理 06 原理理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项⽬目 08 基础篇:webpack 进阶⽤用法 03 核⼼心概念之 Entry Entry ⽤用来指定 webpack 的打包⼊入⼝口 app: './src/app.js', adminApp: './src/adminApp.js' } }; 核⼼心概念之 Output Output ⽤用来告诉 webpack 如何将编译后的⽂文件输出到磁盘 Output 的⽤用法:单⼊入⼝口配置 module.exports = { entry: './path/to/my/entry/file.js' output: { filename: [ { test: /\.txt$/, use: 'raw-loader' } ] } }; test 指定匹配规则 use 指定使⽤用的 loader 名称 核⼼心概念之 Plugins 插件⽤用于 bundle ⽂文件的优化,资源管理理和环境变量量注⼊入 作⽤用于整个构建过程 常⻅见的 Plugins 有哪些? Plugins 的⽤用法 const path = require('path');0 码力 | 41 页 | 2.52 MB | 1 年前3 《玩转webpack》 第二章 基础篇: webpack 基础用法进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略略 05 原理理篇:通过源码掌握 webpack 打包原理理 06 原理理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项⽬目 08 基础篇:webpack 进阶⽤用法 03 核⼼心概念之 Entry Entry ⽤用来指定 webpack 的打包⼊入⼝口 app: './src/app.js', adminApp: './src/adminApp.js' } }; 核⼼心概念之 Output Output ⽤用来告诉 webpack 如何将编译后的⽂文件输出到磁盘 Output 的⽤用法:单⼊入⼝口配置 module.exports = { entry: './path/to/my/entry/file.js' output: { filename: [ { test: /\.txt$/, use: 'raw-loader' } ] } }; test 指定匹配规则 use 指定使⽤用的 loader 名称 核⼼心概念之 Plugins 插件⽤用于 bundle ⽂文件的优化,资源管理理和环境变量量注⼊入 作⽤用于整个构建过程 常⻅见的 Plugins 有哪些? Plugins 的⽤用法 const path = require('path');0 码力 | 41 页 | 2.52 MB | 1 年前3
 《玩转webpack》 第三章 基础篇 Webpack 进阶用法原理理篇:通过源码掌握 webpack 打包原理理 06 原理理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项⽬目 08 基础篇:webpack 进阶⽤用法 03 ������� ����������� 当前构建时的问题 每次构建的时候不不会清理理⽬目录,造成构建的输出⽬目录 output ⽂文件越来越多 通过 npm scripts 清理理构建⽬目录 plugins: [ + new CleanWebpackPlugin() }; 避免构建前每次都需要⼿手动删除 dist 使⽤用 clean-webpack-plugin ·默认会删除 output 指定的输出⽬目录 CSS3 的属性为什什么需要前缀? Trident(-ms) Geko(-moz) Webkit(-webkit) Presto(-o) 举个例例⼦子 .box { -moz-border-radius: border-radius: 10px; } 如何在编写 CSS 不不需要添加前缀? PostCSS 插件 autoprefixer ⾃自动补⻬齐 CSS3 前缀 根据 Can I Use 规则( https://caniuse.com/ ) 使⽤用 autoprefixer 插件 module.exports = { module: { rules: [ { test: /\.less$/0 码力 | 69 页 | 4.33 MB | 1 年前3 《玩转webpack》 第三章 基础篇 Webpack 进阶用法原理理篇:通过源码掌握 webpack 打包原理理 06 原理理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项⽬目 08 基础篇:webpack 进阶⽤用法 03 ������� ����������� 当前构建时的问题 每次构建的时候不不会清理理⽬目录,造成构建的输出⽬目录 output ⽂文件越来越多 通过 npm scripts 清理理构建⽬目录 plugins: [ + new CleanWebpackPlugin() }; 避免构建前每次都需要⼿手动删除 dist 使⽤用 clean-webpack-plugin ·默认会删除 output 指定的输出⽬目录 CSS3 的属性为什什么需要前缀? Trident(-ms) Geko(-moz) Webkit(-webkit) Presto(-o) 举个例例⼦子 .box { -moz-border-radius: border-radius: 10px; } 如何在编写 CSS 不不需要添加前缀? PostCSS 插件 autoprefixer ⾃自动补⻬齐 CSS3 前缀 根据 Can I Use 规则( https://caniuse.com/ ) 使⽤用 autoprefixer 插件 module.exports = { module: { rules: [ { test: /\.less$/0 码力 | 69 页 | 4.33 MB | 1 年前3
 《玩转webpack》 第一章 基础篇: webpack 与构建发展简史实战篇 P8 webpack 的基本概念和⽇日常 开发的实⽤用技巧 以⼯工程化的⽅方式组织 webpack 构 建配置,和 webpack 打包优化 详细剖析 webpack 打包原理理 和插件、Loader 的实现 从实际 Web 商城项⽬目出发, 讲解 webpack 实际使⽤用 基础篇:webpack 与构建发展简史 ⽬目 录 CONTENTS 01 基础篇:webpack 进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略略 05 原理理篇:通过源码掌握 webpack 打包原理理 06 原理理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项⽬目 08 基础篇:webpack 进阶⽤用法 03 为什什么需要构建⼯工具? 转换 ES6 语法 转换 JSX 压缩混淆 7 GitHub stars 40766 11796 29427 周下载量量 3,385,392 478,876 816,228 为什什么选择 webpack? 社区⽣生态丰富 配置灵活和插件化扩展 官⽅方更更新迭代速度快 初识 webpack:配置⽂文件名称 可以通过 webpack --config 指定配置⽂文件 webpack 默认配置⽂文件:webpack.config0 码力 | 17 页 | 690.93 KB | 1 年前3 《玩转webpack》 第一章 基础篇: webpack 与构建发展简史实战篇 P8 webpack 的基本概念和⽇日常 开发的实⽤用技巧 以⼯工程化的⽅方式组织 webpack 构 建配置,和 webpack 打包优化 详细剖析 webpack 打包原理理 和插件、Loader 的实现 从实际 Web 商城项⽬目出发, 讲解 webpack 实际使⽤用 基础篇:webpack 与构建发展简史 ⽬目 录 CONTENTS 01 基础篇:webpack 进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略略 05 原理理篇:通过源码掌握 webpack 打包原理理 06 原理理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项⽬目 08 基础篇:webpack 进阶⽤用法 03 为什什么需要构建⼯工具? 转换 ES6 语法 转换 JSX 压缩混淆 7 GitHub stars 40766 11796 29427 周下载量量 3,385,392 478,876 816,228 为什什么选择 webpack? 社区⽣生态丰富 配置灵活和插件化扩展 官⽅方更更新迭代速度快 初识 webpack:配置⽂文件名称 可以通过 webpack --config 指定配置⽂文件 webpack 默认配置⽂文件:webpack.config0 码力 | 17 页 | 690.93 KB | 1 年前3
 《玩转webpack》 第四章 进阶篇: 编写可维护的 webpack 构建配置进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略 05 原理篇:通过源码掌握 webpack 打包原理 06 原理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项目 08 基础篇:webpack 进阶用法 03 构建配置抽离成 npm 包的意义 可维护性 通用性 质量 ·业务开发者无需关注构建配置 试之前而进行的预测试,这种 预测试的主要目的是暴露导致软件需重新发布的基本功能失效等严重问题。 冒烟测试执行 ·是否有 JS、CSS 等静态资源文件 每次构建完成 build 目录是否有内容输出 ·是否有 HTML 文件 构建是否成功 判断构建是否成功 在示例项目里面运行构建,看看是否有报错 判断基本功能是否正常 ·是否有 JS、CSS 等静态资源文件 编写 mocha 测试用例0 码力 | 30 页 | 5.38 MB | 1 年前3 《玩转webpack》 第四章 进阶篇: 编写可维护的 webpack 构建配置进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略 05 原理篇:通过源码掌握 webpack 打包原理 06 原理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项目 08 基础篇:webpack 进阶用法 03 构建配置抽离成 npm 包的意义 可维护性 通用性 质量 ·业务开发者无需关注构建配置 试之前而进行的预测试,这种 预测试的主要目的是暴露导致软件需重新发布的基本功能失效等严重问题。 冒烟测试执行 ·是否有 JS、CSS 等静态资源文件 每次构建完成 build 目录是否有内容输出 ·是否有 HTML 文件 构建是否成功 判断构建是否成功 在示例项目里面运行构建,看看是否有报错 判断基本功能是否正常 ·是否有 JS、CSS 等静态资源文件 编写 mocha 测试用例0 码力 | 30 页 | 5.38 MB | 1 年前3
 《玩转webpack》加餐:webpack5专题Host 和 Remote。 开创性的特性:ModuleFederationPlugin 介绍 Webpack 内部通过 ModuleFederationPlugin 插件将多个应⽤结合起来。 • name:必须,唯⼀ ID,作为输出的模块名,使⽤的时通过 ${name}/${expose} 的⽅式使⽤ • library:必须,其中这⾥的 name 为作为 umd 的 name; • remotes:可选,表示作为0 码力 | 40 页 | 12.03 MB | 1 年前3 《玩转webpack》加餐:webpack5专题Host 和 Remote。 开创性的特性:ModuleFederationPlugin 介绍 Webpack 内部通过 ModuleFederationPlugin 插件将多个应⽤结合起来。 • name:必须,唯⼀ ID,作为输出的模块名,使⽤的时通过 ${name}/${expose} 的⽅式使⽤ • library:必须,其中这⾥的 name 为作为 umd 的 name; • remotes:可选,表示作为0 码力 | 40 页 | 12.03 MB | 1 年前3
 《玩转webpack》第五章 进阶篇: webpack 构建速度和体积优化策略进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略 05 原理篇:通过源码掌握 webpack 打包原理 06 原理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项目 08 基础篇:webpack 进阶用法 03 stats: 构建的统计信息 package.json 中使用 stats Node.js 中使用 颗粒度太粗, 看不出问题所在 速度分析:使用 speed-measure-webpack-plugin 可以看到每个 loader 和插件执行耗时 代码示例 速度分析插件作用 分析整个打包总耗时 每个插件和loader的耗时情况 webpack-bundle-analyzer 分析体积 代码示例 构建完成后会在 8888 端口展示大小 可以分析哪些问题? webpack 解析一个模块,thread- loader 会将它及它的依赖分配给 worker 线程中 多进程/多实例:并行压缩 方法一:使用 parallel-uglify-plugin 插件 多进程/多实例:并行压缩 方法二:uglifyjs-webpack-plugin 开启 parallel 参数 多进程/多实例:并行压缩 方法三:terser-webpack-plugin0 码力 | 36 页 | 8.13 MB | 1 年前3 《玩转webpack》第五章 进阶篇: webpack 构建速度和体积优化策略进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略 05 原理篇:通过源码掌握 webpack 打包原理 06 原理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项目 08 基础篇:webpack 进阶用法 03 stats: 构建的统计信息 package.json 中使用 stats Node.js 中使用 颗粒度太粗, 看不出问题所在 速度分析:使用 speed-measure-webpack-plugin 可以看到每个 loader 和插件执行耗时 代码示例 速度分析插件作用 分析整个打包总耗时 每个插件和loader的耗时情况 webpack-bundle-analyzer 分析体积 代码示例 构建完成后会在 8888 端口展示大小 可以分析哪些问题? webpack 解析一个模块,thread- loader 会将它及它的依赖分配给 worker 线程中 多进程/多实例:并行压缩 方法一:使用 parallel-uglify-plugin 插件 多进程/多实例:并行压缩 方法二:uglifyjs-webpack-plugin 开启 parallel 参数 多进程/多实例:并行压缩 方法三:terser-webpack-plugin0 码力 | 36 页 | 8.13 MB | 1 年前3
 Gulp 入门指南task(name, fn) - 定义任务,第一个参数是任务名,第二个参数是任务内容。 gulp.src(path) - 选择文件,传入参数是文件路径。 gulp.dest(path) - 输出文件 gulp.pipe() - 管道,你可以暂时将 pipe 理解为将操作加入执行队列 参考:gulp API文档 五、跳转至 五、跳转至 gulpfile.js gulpfile.js 字体文件 └── images/ 图片 └── dist/ 你可以点击 nimojs/gulp-demo 下载本章代码。 让命令行输出的文字带颜色 gulp 入门指南 - 23 - 本文档使用 看云 构建 gulp 自带的输出都带时间和颜色,这样很容易识别。我们利用 gulp-util 实现同样的效果。 var gulp = require('gulp') var gutil "some") }) 使用 gulp 启动默认任务以测试 配置 JS 任务 gulp-uglify 检测 src/js/ 目录下的 js 文件修改后,压缩 js/ 中所有 js 文件并输出到 dist/js/ 中 var uglify = require('gulp-uglify') gulp.task('uglifyjs', function () { gulp.src('src/js/**/*0 码力 | 36 页 | 275.87 KB | 1 年前3 Gulp 入门指南task(name, fn) - 定义任务,第一个参数是任务名,第二个参数是任务内容。 gulp.src(path) - 选择文件,传入参数是文件路径。 gulp.dest(path) - 输出文件 gulp.pipe() - 管道,你可以暂时将 pipe 理解为将操作加入执行队列 参考:gulp API文档 五、跳转至 五、跳转至 gulpfile.js gulpfile.js 字体文件 └── images/ 图片 └── dist/ 你可以点击 nimojs/gulp-demo 下载本章代码。 让命令行输出的文字带颜色 gulp 入门指南 - 23 - 本文档使用 看云 构建 gulp 自带的输出都带时间和颜色,这样很容易识别。我们利用 gulp-util 实现同样的效果。 var gulp = require('gulp') var gutil "some") }) 使用 gulp 启动默认任务以测试 配置 JS 任务 gulp-uglify 检测 src/js/ 目录下的 js 文件修改后,压缩 js/ 中所有 js 文件并输出到 dist/js/ 中 var uglify = require('gulp-uglify') gulp.task('uglifyjs', function () { gulp.src('src/js/**/*0 码力 | 36 页 | 275.87 KB | 1 年前3
 《玩转webpack》第八章 实战篇: React 全家桶 和 webpack 开发商城项巨进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略略 05 原理理篇:通过源码掌握 webpack 打包原理理 06 原理理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项⽬目 08 基础篇:webpack 进阶⽤用法 03 扫码试看/订阅 《玩转 webpack》视频课程 商城技术栈选型0 码力 | 25 页 | 5.67 MB | 1 年前3 《玩转webpack》第八章 实战篇: React 全家桶 和 webpack 开发商城项巨进阶篇:编写可维护的 webpack 构建配置 04 进阶篇:webpack 构建速度和体积优化策略略 05 原理理篇:通过源码掌握 webpack 打包原理理 06 原理理篇:编写 Loader 和插件 07 实战篇:React 全家桶 和 webpack 开发商城项⽬目 08 基础篇:webpack 进阶⽤用法 03 扫码试看/订阅 《玩转 webpack》视频课程 商城技术栈选型0 码力 | 25 页 | 5.67 MB | 1 年前3
共 11 条
- 1
- 2













