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

 更新时间:2023年08月29日 09:01:02   作者:小周不摆烂  
这篇文章主要给大家介绍了关于如何用Webpack搭建开发环境并打包的相关资料,webpack是一个现代JavaScript应用程序的静态模块打包器(module bundler),需要的朋友可以参考下

搭建开发环境

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

开发环境: 配置 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. 打包 观察效果

总结

到此这篇关于用Webpack搭建开发环境并打包代码的文章就介绍到这了,更多相关Webpack搭建开发环境并打包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nodeJs的安装与npm全局环境变量的配置详解

    nodeJs的安装与npm全局环境变量的配置详解

    这篇文章主要介绍了nodeJs的安装与npm全局环境变量的配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • node.js实现上传文件功能

    node.js实现上传文件功能

    这篇文章主要为大家详细介绍了node.js实现上传文件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • nodejs简单访问及操作mysql数据库的方法示例

    nodejs简单访问及操作mysql数据库的方法示例

    这篇文章主要介绍了nodejs简单访问及操作mysql数据库的方法,结合实例形式分析了nodejs创建mysql连接、执行sql语句及关闭连接等相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • 浅析nodejs实现Websocket的数据接收与发送

    浅析nodejs实现Websocket的数据接收与发送

    WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术,本文给大家介绍nodejs实现websocket的数据库接收与发送,小伙伴们一起学习吧
    2015-11-11
  • NodeJS使用七牛云存储上传文件的方法

    NodeJS使用七牛云存储上传文件的方法

    这篇文章主要介绍了NodeJS使用七牛云存储上传文件的方法,使用七牛云存储上传文件确认安装node和npm,具体服务器端的云存储操作方法大家参考下本文吧
    2017-07-07
  • Node.js实现用户评论社区功能(体验前后端开发的乐趣)

    Node.js实现用户评论社区功能(体验前后端开发的乐趣)

    这篇文章主要介绍了Node.js实现用户评论社区(体验前后端开发的乐趣) ,需要的朋友可以参考下
    2019-05-05
  • 详解Node.js 应用高 CPU 占用率分析方法

    详解Node.js 应用高 CPU 占用率分析方法

    这篇文章主要为大家介绍了Node.js 应用高 CPU 占用率分析方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 使用PM2实现高效的应用监控与管理功能

    使用PM2实现高效的应用监控与管理功能

    PM2 是一个流行的进程管理器,用于 Node.js 应用程序,它支持应用程序的负载均衡、自动重启、日志管理、监控以及多环境管理等功能,本文给大家介绍了如何使用PM2实现高效的应用监控与管理功能,需要的朋友可以参考下
    2024-02-02
  • node+express+jade制作简单网站指南

    node+express+jade制作简单网站指南

    上文我们介绍了使用node+express+ejs制作页面,今天我们来看看使用node+express+jade制作简单网站,本文记录了一下整个搭建过程,给需要的小伙伴们参考下吧
    2014-11-11
  • 详解electron如何拦截网络请求并处理响应

    详解electron如何拦截网络请求并处理响应

    这篇文章主要为大家详细介绍了electron如何拦截网络请求并处理响应,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12

最新评论