备案 控制台
开发者社区 开发与运维 文章 正文

学会用Webpack搭建开发环境并打包代码

简介: 学会用Webpack搭建开发环境并打包代码

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

搭建开发环境

打包模式

打包模式的应用  

前端-注入环境变量

DefinePlugin

Usage

开发环境调错 - source map

解析别名 alias

优化-CDN使用

多页面打包

优化-分割公共代码


搭建开发环境

问题:之前改代码,需重新打包才能运行查看,效率很低

开发环境: 配置 webpack-dev-server 快速开发应用程序

作用:启动 Web 服务, 自动 检测代码变化, 热更新 到网页

注意:dist 目录和打包内容是在内存里(更新快)

步骤:

1. 下载 webpack-dev-server 软件包到当前项目

2. 设置模式 为 开发模式 ,并配置 自定义命令

3. 使用 npm run dev 来启动开发服务器,试试热更新效果

打包模式

打包模式告知 Webpack 使用相应模式的内置优化

分类:

设置:

方式1:在 webpack.config.js 配置文件设置 mode 选项  

方式2:在 package.json 命令行设置 mode 参数

注意:命令行设置的优先级高于配置文件中的,推荐用命令行设置

打包模式的应用  

需求:在开发模式下用 style-loader 内嵌更快,在生产模式下提取 css 代码

方案1: webpack.config.js 配置导出函数,但是局限性大(只接受 2 种模式)

方案2:借助 cross-env (跨平台通用)包命令,设置参数区分环境

步骤:

1. 下载 cross-env 软件包到当前项目

2. 配置 自定义命令,传入参数名和值(会绑定到 process.env 对象下)

3. 在 webpack.config.js 区分不同环境 使用 不同配置

4. 重新打包观察两种配置区别

方案3: 配置不同的 webpack.config.js (适用多种模式差异性较大情况)

前端-注入 环境变量

需求: 前端 项目中,开发模式下打印语句生效,生产模式下打印语句失效

问题:cross-env 设置的只在 Node.js 环境生效,前端代码无法访process.env.NODE_ENV

解决 :使用 Webpack 内置的 DefinePlugin 插件

作用:在编译时,将前端代码中匹配的变量名,替换为值或表达式

DefinePlugin

DefinePlugin 允许在 编译时 将你代码中的变量替换为其他值或表达式。这在需要根据开发模式与生产模式进行不同的操作时,非常有用。例如,如果想在开发构建中进行日志记录,而不在生产构建中进行,就可以定义一个全局常量去判断是否记录日志。这就是 DefinePlugin 的发光之处,设置好它,就可以忘掉开发环境和生产环境的构建规则。

new webpack.DefinePlugin({
  // 定义...
});

Usage

传递给 DefinePlugin 的每个键都是一个标识符或多个以 . 连接的标识符。

如果该值为字符串,它将被作为代码片段来使用。

如果该值不是字符串,则将被转换成字符串(包括函数方法)。

如果值是一个对象,则它所有的键将使用相同方法定义。

如果键添加 typeof 作为前缀,它会被定义为 typeof 调用。

这些值将内联到代码中,从而允许通过代码压缩来删除冗余的条件判断

new webpack.DefinePlugin({
  PRODUCTION: JSON.stringify(true),
  VERSION: JSON.stringify('5fa3b9'),
  BROWSER_SUPPORTS_HTML5: true,
  TWO: '1+1',
  'typeof window': JSON.stringify('object'),
  'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
});

开发环境调错 - source map

问题:代码被压缩和混淆,无法正确定位源代码位置(行数和列数)

source map: 可以准确追踪 error 和 warning 在原始代码的位置

设置:webpack.config.js 配置 devtool 选项

inline-source-map 选项:把源码的位置信息一起打包在 js 文件内

注意:source map 仅适用于开发环境,不要在生产环境使用(防止被 轻易 查看源码位置)

解析别名 alias

解析别名: 配置模块如何解析,创建 import 引入路径的别名,来确保模块引入变得更简单

例如:原来路径如图,比较长而且相对路径不安全

解决:在 webpack.config.js 中配置解析别名 @ 来代表 src 绝对路径  

优化-CDN使用

CDN定义:内容分发网络,指的是一组分布在各个地区的服务器

作用:把静态资源文件/第三方库放在 CDN 网络中各个服务器中,供用户就近请求获取

好处:减轻自己服务器请求压力,就近请求物理延迟低,配套缓存策略

步骤:

1. 在 html 中引入第三方库的 CDN 地址 并用模板语法判断

2. 配置 webpack.config.js 中 externals 外部扩展选项(防止某些 import 的包被打包)  

 

3. 两种模式下打包观察效果

多页面打包

单页面 : 单个 html 文件,切换 DOM 的方式实现不同业务逻辑展示,后续 Vue/React 会学到

多页面: 多个 html 文件,切换页面实现不同业务逻辑展示

需求:把黑马头条-数据管理平台-内容页面一起引入打包使用

步骤:

1. 准备 源码 (html,css,js)放入相应位置,并改用模块化语法 导出

2. 下载 form-serialize 包并 导入 到核心代码中使用

3. 配置 webpack.config.js 多入口 和 多页面 的设置

4. 重新打包观察效果

优化-分割公共代码

需求:把 2 个以上页面引用的公共代码提取

步骤:

1. 配置 webpack.config.js 的 splitChunks 分割功能

2. 打包观察效果

小周不摆烂
目录
相关文章
Boale_H
|
1月前
|
JavaScript 前端开发
webpack成长指北第9章---webpack如何对icon字体进行打包
webpack成长指北第9章---webpack如何对icon字体进行打包
Boale_H
52 1
Boale_H
|
1月前
|
前端开发 JavaScript
webpack成长指北第7章---webpack的css\less\scss样式打包
webpack成长指北第7章---webpack的css\less\scss样式打包
Boale_H
52 0
Boale_H
|
1月前
|
前端开发 JavaScript
webpack成长指北第8章---webpack的CSS Modules打包
webpack成长指北第8章---webpack的CSS Modules打包
Boale_H
30 0
凯小默
|
1月前
webpack 使用打包报错 ERROR in node_modules\@types\node\ts4.8\assert.d.ts
webpack 使用打包报错 ERROR in node_modules\@types\node\ts4.8\assert.d.ts
凯小默
171 0
龙大吉
|
13天前
|
缓存 前端开发 JavaScript
Webpack作为模块打包器,为前端项目提供了高度灵活和可配置的构建流程
【6月更文挑战第12天】本文探讨了优化TypeScript与Webpack构建性能的策略。理解Webpack的解析、构建和生成阶段是关键。优化包括:调整tsconfig.json(如关闭不必要的类型检查)和webpack.config.js选项,启用Webpack缓存,实现增量构建,代码拆分和懒加载。这些方法能提升构建速度,提高开发效率。
龙大吉
30 3
wscwdie
|
1月前
|
前端开发 JavaScript 开发者
深入了解Webpack:前端模块打包工具
深入了解Webpack:前端模块打包工具
wscwdie
26 1
梦回故国楼台梦
|
1月前
|
JavaScript 前端开发
构建工具:配置Webpack打包Vue项目
【4月更文挑战第24天】本文介绍了如何配置Webpack来打包Vue项目。首先,Webpack作为模块打包器处理依赖并打包成可执行文件。接着,通过安装Node.js和npm,创建Vue项目,进入项目目录并配置Webpack的入口、输出、加载器和插件。最后,运行构建命令完成打包。理解Webpack基础并按需配置,能优化前端项目构建和开发体验。
梦回故国楼台梦
27 0
&ACE&
|
1月前
|
前端开发 JavaScript 开发者
webpack打包机制,构建过程和配置
webpack打包机制,构建过程和配置
&ACE&
24 0
一个车迷
|
1月前
说说webpack中代码分割如何实现?
说说webpack中代码分割如何实现
一个车迷
20 0
Hello,C++!
|
1月前
|
JavaScript 前端开发
在项目中引入webpack打包工具
在项目中引入webpack打包工具
Hello,C++!
39 0

热门文章

最新文章

  • 1
    Webpack构建library时的踩坑经历
  • 2
    Webpack 2 视频教程 009 - 配置 ESLint 实现代码规范自动测试 (上)
  • 3
    React 框架和Webpack
  • 4
    Webpack入门教程二十五
  • 5
    使用webpack loader加载器
  • 6
    webpack html-webpack-plugin
  • 7
    Webpack 2 视频教程 003 - Webpack 项目初始化
  • 8
    使用antd-theme-webpack-plugin报错Error LessError: Cannot find module ‘antd/lib/style/themes/default.less
  • 9
    Webpack 2 视频教程 001 - Webpack 简介
  • 10
    webpack优化篇(四十):速度分析:使用 speed-measure-webpack-plugin
  • 1
    js开发:请解释什么是Webpack,以及它在项目中的作用。
    31
  • 2
    webpack如何设置devServer启动项目为https协议
    370
  • 3
    webpack成长指北第9章---webpack如何对icon字体进行打包
    52
  • 4
    webpack成长指北第8章---webpack的CSS Modules打包
    30
  • 5
    webpack成长指北第7章---webpack的css\less\scss样式打包
    52
  • 6
    webpack成长指北第6章---webpack的图片引入
    33
  • 7
    webpack成长指北第3章---常用webpack命令及使用webpack命令的方式
    38
  • 8
    webpack成长指北第2章---安装webpack的正确姿势
    25
  • 9
    深入理解前端性能优化中的Webpack Tree Shaking
    36
  • 10
    Webpack 进阶:深入理解其工作原理与优化策略
    71
  • 相关课程

    更多
  • 前端自动化构建工具 Webpack
  • Python Web 框架 Django 快速入门
  • Python Web 框架 Flask 快速入门
  • Spring Boot+Vue.js+FastDFS实现分布式图片服务器
  • 前端开发框架Bootstrap使用教程
  • 企业Web常用架构LAMP-LNMP实战
  • 相关电子书

    更多
  • 基于webpack和npm的前端组件化实践
  • 从Web到Cloud App——YunOS Web App 开发经验分享
  • 从Web到Cloud App
  • 相关实验场景

    更多
  • Html5和Webpack3:Webpack5的常见用法
  • Html5和Webpack2:Webpack5打包JS和样式表
  • Html5和Webpack1:Webpack5打包工具介绍
  • 前端开发基础6:Node.js和LESS预编译工具
  • WEB网页编程实战
  • Web Terminal环境使用指南
  • 下一篇
    部署LAMP环境(Alibaba Cloud Linux 3)

    深圳SEO优化公司南联外贸网站设计平湖网站设计模板南山优化坑梓关键词按天扣费龙岗网络营销塘坑网站改版松岗网站推广方案丹竹头网站推广工具塘坑网站推广福田企业网站建设南山模板网站建设荷坳至尊标王光明网页设计木棉湾关键词按天计费吉祥seo广州seo平湖百姓网标王福田建设网站木棉湾优秀网站设计惠州网站优化软件双龙品牌网站设计木棉湾优秀网站设计深圳关键词排名沙井百度标王盐田网站搜索优化龙华关键词排名包年推广惠州网站搭建大鹏至尊标王南山百姓网标王推广坂田网络营销歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

    深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化