玩转 webpack
程柳锋
腾讯高级工程师,IVWEB 团队社区和工程化负责人
27458 人已学习
新⼈⾸单¥68
课程目录
已完结/共 87 讲
加餐:webpack 5 专题内容 (3讲)
玩转 webpack
登录|注册
留言
36
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 33 | webpack打包组件和基础库
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的构建原理
本节摘要
登录 后留言

全部留言(36)

  • 最新
  • 精选
程序员劝退师
1:28秒提及到开发阶段使用压缩版,生产使用非压缩版本,为什么不是反过来呀?

作者回复: 嗯,听的很仔细,点赞。压缩版本在线上环境使用,非压缩版本在开发阶段或者调试时使用。

2019-08-11
7
14
段子黄
打包出来之后,在html页面中导入large-number.js为什么报 add 方法不存在?我的webpack配置如下 感觉和你一摸一样啊,libraryTarget 设置为 umd 不是可以支持直接导入 script标签吗? const TerserPlugin = require('terser-webpack-plugin') module.exports = { mode:'none', entry:{ 'large-number':'./src/common/largeNumber.js', 'large-number.min':'./src/common/largeNumber.js' }, output:{ filename:'[name].js', library:'largeNumber', libraryTarget:'umd', // 支持AMD CJS ESM script导入等 libraryExport:'default' }, optimization: { minimize:true, minimizer: [new TerserPlugin({ include:/\.min\.js$/ })] } }

作者回复: 是因为这个组件编写的时候是直接通过 export default 导出了一个默认的函数: export default function add(a, b) { let i = a.length - 1; let j = b.length - 1; let carry = 0; let ret = ''; while (i >= 0 || j >= 0) { } ...... } 所以通过script、或者 ESM/CJS/AMD 的方式引用的时候直接 largeNumber('999', '1') 就可以了。如果想要通过 largeNumber.add() 的方式调用的话,写成 export function add(a, b) {} 的形式,把 default 去掉

2019-06-26
9
dudustyle
老师,课程跟实际的课程安排好像不一致,漏了几节课,SSR和骨架屏,是要放在后面讲吗?

作者回复: 放在这节课后面了

2019-06-25
4
天青
index.js中判断不同环境引入不同的包,这个判断少了个等号 process.env.NODE_ENV === 'production'

作者回复: 嗯嗯,在这个组件库的1.0.1版本是有修复的。视频里面安装的时候也是使用的这个版本

2019-06-25
3
4
RELAX
一开始听的很懵逼,但是坚持下下来,发现越听越明白。感觉思路都打通了。

作者回复: 强,厉害了

2019-07-01
2
sandy
老师讲的很好,点赞

作者回复: 🙏感谢夸奖

2019-06-25
linwu
老师我问问个 为什么最后导出的方式是cjs if (process.env.NODE_ENV === 'production') { module.exports = require('./dist/large-number.min.js'); } else { module.exports = require('./dist/large-number.js'); }
2020-06-15
1
2
coder
在第23分钟的时候,对index.js内容的编写,有一个bug: ```` if (process.env.NODE_ENV = 'production') { ... } ```` `if`语句里的条件判断,应该用`===`而不是'='。
2019-10-23
1
2
Sherry
老师,请问,打包未压缩版本的意义是什么呢? 【个人理解】 index.js导出的时候,有判断NODE_ENV,这里的NODE_ENV,是指使用组件的项目的构建环境。 这样一来,组件使用者在开发过程中,就可以debug到编译过、但未压缩的组件代码了。而生产环境,会打包压缩后的组件代码。 【疑问】 如果为了开发者debug方便,为什么不选择开启前面讲过的sourcemap呢? 如果不开启sourcemap是为了保护源码,不泄露给开发者,那暴露编译过、未压缩的代码,就不算暴露源码了嘛?
2019-08-28
1
2
阳少宇
请问下老师, main中入口文件并不是以 export导出的,为啥可以通过import("large-number")导入.
2020-06-04
1
收起评论