玩转 webpack
程柳锋
腾讯高级工程师,IVWEB 团队社区和工程化负责人
27458 人已学习
新⼈⾸单¥68
课程目录
已完结/共 87 讲
加餐:webpack 5 专题内容 (3讲)
玩转 webpack
登录|注册
留言
9
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 42 | 单元测试和测试覆盖率
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 为什么需要构建工具
04 | 前端构建演变之路
05 | 为什么选择webpack
06 | 初识webpack
07 | 环境搭建:安装webpack
08 | webpack初体验:一个最简单的例子
09 | 通过npm script运行webpack
10 | webpack核心概念之entry
11 | webpack核心概念之output
12 | webpack核心概念之loaders
13 | webpack核心概念之plugins
14 | webpack核心概念之mode
15 | 解析ECMASCript 6和React JSX
16 | 解析CSS、Less和Sass
17 | 解析图片和字体
18 | webpack中的文件监听
19 | webpack中的热更新及原理分析
20 | 文件指纹策略:chunkhash、contenthash和hash
21 | HTML 、CSS和JavaScript代码压缩
22 | 自动清理构建目录产物
23 | PostCSS插件autoprefixer自动补齐CSS3前缀
24 | 移动端CSS px自动转换成rem
25 | 静态资源内联
26 | 多页面应用打包通用方案
27 | 使用sourcemap
28 | 提取页面公共资源
29 | Tree Shaking的使用和原理分析
30 | Scope Hoisting使用和原理分析
31 | 代码分割和动态import
32 | 在webpack中使用ESLint
33 | webpack打包组件和基础库
34 | webpack实现SSR打包(上)
35 | webpack实现SSR打包(下)
36 | 优化构建时命令行的显示日志
37 | 构建异常和中断处理
38 | 构建配置包设计
39 | 功能模块设计和目录结构
40 | 使用ESLint规范构建脚本
41 | 冒烟测试介绍和实际运用
42 | 单元测试和测试覆盖率
43 | 持续集成和Travis CI
44 | 发布构建包到npm社区
45 | Git Commit规范和changelog生成
46 | 语义化版本(Semantic Versioning)规范格式
47 | 初级分析:使用webpack内置的stats
48 | 速度分析:使用speed-measure-webpack-plugin
49 | 体积分析:使用webpack-bundle-analyzer
50 | 使用高版本的webpack和Node.js
51 | 多进程/多实例构建
52 | 多进程并行压缩代码
53 | 进一步分包:预编译资源模块
54 | 充分利用缓存提升二次构建速度
55 | 缩小构建目标
56 | 使用Tree Shaking擦除无用的JavaScript和CSS
57 | 使用webpack进行图片压缩
58 | 使用动态Polyfill服务
59 | webpack启动过程分析
60 | webpack-cli源码阅读
61 | Tapable插件架构与Hooks设计
62 | Tapable是如何和webpack进行关联起来的?
63 | webpack流程篇:准备阶段
64 | webpack流程篇:模块构建和chunk生成阶段
65 | webpack流程篇:文件生成
66 | 动手编写一个简易的webpack(上)
67 | 动手编写一个简易的webpack(下)
68 | loader的链式调用与执行顺序
69 | 使用loader-runner高效进行loader的调试
70 | 更复杂的loader的开发场
71 | 实战开发一个自动合成雪碧图的loader
72 | 插件基本结构介绍
73 | 更复杂的插件开发场景
74 | 实战开发一个压缩构建资源为zip包的插件
75 | 商城技术栈选型和整体架构
76 | 商城界面UI设计与模块拆分
77 | React全家桶环境搭建
78 | 数据库实体和表结构设计
79 | 登录注册模块开发
80 | 商品模块开发
81 | 订单模块开发
82 | 谈谈Web商城的性能优化策略
83 | 功能开发总结
84 | 玩转webpack结束语
加餐:webpack 5 新特性解析
加餐:bundle和bundless的差异
加餐:Vite的构建原理
本节摘要
登录 后留言

全部留言(9)

  • 最新
  • 精选
袋袋
两个问题 1、单元测试可以对业务代码进行测试吗,和平时自己本地运行调试有什么本质上的区别吗。 2、冒烟测试可以直接运行构建看是否成功,单元测试一项一项测是不是比冒烟麻烦很多,单元测试的优势是什么相对于冒烟。

作者回复: 建议可以整体的去学习了解下前端测试这个方向的知识体系。这两个问题回答下: 1. 单元测试可以对业务代码进行测试,我们团队针对核心业务会做单元测试和端对端测试。单测更加适合通用组件和基础模块。和本地调试的区别:本地调试是黑盒,颗粒度较粗,单测是白盒,颗粒度更细。另外单侧可以覆盖到具体的代码,比如某段代码只有特定的情况才会执行。单测也是一个衡量项目质量很好的手段,每次需求迭代都可以通过单测保证基础的逻辑不受到影响。 2. 单元测试颗粒度更细,是白盒,需要针对具体的代码逻辑分支进行测试用例编写。冒烟测试只是关注最基本的功能是否ok,比如构建是否成功,是否有资源生成出来,也是一个黑盒的过程。

2019-07-17
2
7
yhq
单元测试和测试覆盖率一般是在构建前全部完成,还是构建后呢

作者回复: 这里有两种情况: 第一种:也是我们本章的场景,即针对基础组件或者构建包而言。需要通过单测和测试覆盖率保证组件质量。这个是需要在发版前严格遵守的。 第二种:对于业务而言,每次commit时会进行业务代码的构建。同时异步的触发单测和测试覆盖率检查,并没有先后顺序要求。

2019-07-21
Noah
"Mocha"是“摩卡”,发音是/ˈmōkə/。一种咖啡,摩卡咖啡。哈哈,当然,这不重要。
2019-10-14
3
8
不想说什么
老师你好 const path = require('path'); process.chdir(path.join(__dirname, 'smoke/template')); describe('builder-webpack test case', () => { require('./unit/webpack-base-test'); }); 在编写这个测试用例时为什么要切换到template目录
2019-12-19
1
1
小岩岩
请问为什么要使用process.chdir修改工作目录呢?不是很理解
2022-10-28
RageYourDream
geektime-builder-webpack 这个包,现在没有了。
2020-04-26
Geek_983df7
No coverage information was collected, exit without writing coverage information E:\ImportantTest\WEBPACK\my-test\builder-webpack\node_modules\.bin\_mocha:2 basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") ^^^^^^^ SyntaxError: missing ) after argument list at Module._compile (internal/modules/cjs/loader.js:892:18) at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10) at Object.Module._extensions.<computed> [as .js] (E:\ImportantTest\WEBPACK\my-test\builder-webpack\node_modules\istanbul\lib\hook.js:109:37) at Module.load (internal/modules/cjs/loader.js:812:32) at Function.Module._load (internal/modules/cjs/loader.js:724:14) at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10) at runFn (E:\ImportantTest\WEBPACK\my-test\builder-webpack\node_modules\istanbul\lib\command\common\run-with-cover.js:122:16) at E:\ImportantTest\WEBPACK\my-test\builder-webpack\node_modules\istanbul\lib\command\common\run-with-cover.js:251:17 at E:\ImportantTest\WEBPACK\my-test\builder-webpack\node_modules\istanbul\lib\util\file-matcher.js:68:16 at E:\ImportantTest\WEBPACK\my-test\builder-webpack\node_modules\async\lib\async.js:52:16 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! ztsk-webpack@1.0.0 test: `istanbul cover ./node_modules/.bin/_mocha` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the ztsk-webpack@1.0.0 test script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\Administrator\AppData\Roaming\npm-cache\_logs\2019-11-25T07_47_47_152Z-debug.log
2019-11-25
4
周大侠
老师执行"test": "istanbul cover ./node_modules/.bin/_mocha",报错 这是我的版本 "istanbul": "^0.4.5", "mocha": "^6.2.2", test /Users/zzh/project/build-webpack-zzh > istanbul cover ./node_modules/.bin/_mocha Failed to parse file: /Users/zzh/project/build-webpack-zzh/lib/webpack.base.js Transformation error; return original code { Error: Line 38: Unexpected token ) at constructError (/Users/zzh/project/build-webpack-zzh/node_modules/istanbul/node_modules/esprima/esprima.js:2407:21) at createError (/Users/zzh/project/build-webpack-zzh/node_modules/istanbul/node_modules/esprima/esprima.js:2426:17) at unexpectedTokenError (/Users/zzh/project/build-webpack-zzh/node_modules/istanbul/node_modules/esprima/esprima.js:2500:13) at throwUnexpectedToken (/Users/zzh/project/build-webpack-zzh/node_modules/istanbul/node_modules/esprima/esprima.js:2505:15) at parsePrimaryExpression (/Users/zzh/project/build-webpack-zzh/node_modules/istanbul/node_modules/esprima/esprima.js:3307:13) at inheritCoverGrammar (/Users/zzh/project/build-webpack-zzh/node_modules/istanbul/node_modules/esprima/esprima.js:2681:18) at parseLeftHandSideExpressionAllowCall (/Users/zzh/project/build-webpack-zzh/node_modules/istanbul/node_modules/esprima/esprima.js:3414:20) at inheritCoverGrammar (/Users/zzh/project/build-webpack-zzh/node_modules/istanbul/node_modules/esprima/esprima.js:2681:18) at parsePostfixExpression (/Users/zzh/project/build-webpack-zzh/node_modules/istanbul/node_modules/esprima/esprima.js:3490:16)
2019-11-04
4
请叫我胖虎
老师照着你的 写法 报这个错 istanbul cover ./node_modules/.bin/_mocha No coverage information was collected, exit without writing coverage information D:\D_disk\LEARN_CODE\webpack4.0\build-webpack\node_modules\.bin\_mocha:2 basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") ^^^^^^^ SyntaxError: missing ) after argument list at Module._compile (internal/modules/cjs/loader.js:721:23) at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10) at Object.Module._extensions.(anonymous function) [as .js] (D:\D_disk\LEARN_CODE\webpack4.0\build-webpack\node_modules\istanbul\lib\hook.js:109:37) at Module.load (internal/modules/cjs/loader.js:653:32) at tryModuleLoad (internal/modules/cjs/loader.js:593:12) at Function.Module._load (internal/modules/cjs/loader.js:585:3) at Function.Module.runMain (internal/modules/cjs/loader.js:829:12) at runFn (D:\D_disk\LEARN_CODE\webpack4.0\build-webpack\node_modules\istanbul\lib\command\common\run-with-cover.js:122:16) at D:\D_disk\LEARN_CODE\webpack4.0\build-webpack\node_modules\istanbul\lib\command\common\run-with-cover.js:251:17 at D:\D_disk\LEARN_CODE\webpack4.0\build-webpack\node_modules\istanbul\lib\util\file-matcher.js:68:16 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! build-webpack@1.0.0 test: `istanbul cover ./node_modules/.bin/_mocha` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the build-webpack@1.0.0 test script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\11294\AppData\Roaming\npm-cache\_logs\2019-07-23T04_09_28_095Z-debug.log
2019-07-23
5
收起评论