前端项目练习(练习-003-webpack-01)

news2024/11/23 20:50:22

学习webpack前,首先,创建一个web-003项目,内容和web-002一样。(注意将package.json中的name改为web-003)

想想,我们开发Java 的时候,Maven帮我们做的主要是编译,打包等等内容。开发前端其实也需要类似的工具。

当然打包用的构建工具肯定不止一个,我们先从webpack开始入手。

概念

本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容。

webpack中文文档地址是:概念 | webpack 中文文档 | webpack中文文档 | webpack中文网

由于npm是nodejs的包管理工具,所以,安装webpack需要用npm命令:

npm install webpack --save-dev

注意,后面加上 --save-dev 表示你将依赖包安装到devDependencies,该依赖只会在开发阶段用到,而在生产阶段不会用到。

除了webpack,还需要安装webpack-cli:

npm install webpack-cli --save-dev

为什么使用webpack要安装这两个包呢?

在webpack4之前,webpack本身和它的CLI以前都是在同一个包中,但从第4版开始,他们已经将两者分开来更好地管理它们。

也就是说,webpack 从 4.0 版本开始,在安装时,就必须要安装这两个东西。webpack 是打包代码时依赖的核心内容,而 webpack-cli 是一个用来在命令行中运行 webpack 的工具。

上面的两个包的安装还可以放到一条命令中:

npm install webpack webpack-cli --save-dev

安装结果如下:

安装完成后,项目根目录下面多了一个文件夹 node_modules 和一个文件 package-lock.json,

同时原来的package.json内容也有变化:

多了一个 devDependencies 字段,里面内容就是新安装的webpack和webpack-cli包和包的版本。

我们使用npm安装的包也都会列在这里。

node_modules文件夹里面是项目所有的依赖包,从第一个依赖包被 npm install 安装后,这个文件夹就会被创建,简单而言, node_modules 是为 Node 设计存放依赖的文件夹。

npm 5.0版本之后,npm install后都会创建一个package-lock.json文件,它的作用是:

1、锁定安装时的包的版本号,有git库时,需要上传到git,保证大家的依赖包一致。

2、package-lock.json 是在 `npm install`时候生成一份文件,用来记录当前状态下实际安装的各个npm package的具体来源和版本号。

3、它有什么用呢?因为npm是一个用于管理package之间依赖关系的管理器,它允许开发者在pacakge.json中间标出自己项目对npm各库包的依赖。你可以选择以如下方式来标明自己所需要库包的版本;例如:

"dependencies": {
 "@types/node": "^8.0.33",
},

这里面的 向上标号^是定义了向后(新)兼容依赖,指如果 types/node的版本是超过8.0.33,并在大版本号(8)上相同,就允许下载最新版本的 types/node库包,例如实际上可能运行npm install时候下载的具体版本是8.0.35。

大多数情况这种向新兼容依赖下载最新库包的时候都没有问题,可是因为npm是开源世界,各库包的版本语义可能并不相同,有的库包开发者并不遵守严格这一原则:相同大版本号的同一个库包,其接口符合兼容要求。这时候用户就很头疼了:在完全相同的一个nodejs的代码库,在不同时间或者不同npm下载源之下,下到的各依赖库包版本可能有所不同,因此其依赖库包行为特征也不同有时候甚至完全不兼容。

因此npm最新的版本就开始提供自动生成package-lock.json功能,为的是让开发者知道只要你保存了源文件,到一个新的机器上、或者新的下载源,只要按照这个package-lock.json所标示的具体版本下载依赖库包,就能确保所有库包与你上次安装的完全一样。

4、package.json缺点

  原来package.json文件只能锁定大版本,也就是版本号的第一位,并不能锁定后面的小版本,你每次npm install都是拉取的该大版本下的最新的版本,为了稳定性考虑我们几乎是不敢随意升级依赖包的,这将导致多出来很多工作量,测试/适配等,所以package-lock.json文件出来了,当你每次安装一个依赖的时候就锁定在你安装的这个版本。

5、安装依赖出问题的解决方式不同:

那如果我们安装时的包有bug,后面需要更新怎么办?

以前:在以前可能就是直接改package.json里面的版本,然后再npm install了。

现在:但是5版本后就不支持这样做了,因为版本已经锁定在package-lock.json里了,所以我们只能npm install xxx@x.x.x  这样去更新我们的依赖,然后package-lock.json也能随之更新。

接下来继续配置webpack,我们从控制台安装好webpack和webpack-cli后,需要在项目根目录下面创建webpack的配置文件,名字是 webpack.config.js。

注意,webpack配置文件的默认名字是 webpack.config.js  ,当然可以起其它的名字,但是这样会增加额外的配置,建议使用约定好的即可。

关于配置文件里面写什么内容,我们来看官方文档中给的一个例子:

webpack配置例子链接 

现在把例子中webpack.config.js中的内容复制到我们自己的webpack.config.js中:

其中只有基本的entry和output两个配置,我们来修改成自己的。

入口(entry)

入口起点(entry point) 指的是 webpack 应该使用哪个模块,来作为构建的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。

entry默认值是 ./src/index.js,但你可以通过在webpack.config.js中配置 entry 属性,来指定一个(或多个)不同的入口起点。例如:

或者

上面的配置指定的,都是我们自己的项目的src/view/index.js文件。

关于entry(入口)的文档说明如下:

entry(入口)配置说明链接

输出(output)

output 属性告诉 webpack 在哪里输出它所打包好的文件 ,以及如何命名这些文件。官方文档给的例子中,filename表示主要输出文件的默认值是 ./dist/main.js,其他生成文件默认放置在 ./dist 文件夹中。

关于output的配置文档说明如下:

输出(output)配置文档说明链接

关于我们自己的项目,可以把指定好的主要输出文件的名字去掉,直接让文件保持原来的命名,然后放到./dist文件夹中即可。

webpack.config.js配置完成后,内容如下:

除了entry和output,还需要配置 模式(mode) ,来看一下文档中的说明:

webpack模式(mode)说明文档链接

关于模式,非常类似于Java中的profiles,设置mode可以自动触发webpack内置的函数,达到优化的效果。开发阶段的开启会有利于热更新的处理,识别哪个模块变化。生产阶段的开启会有帮助模块压缩,处理副作用等一些功能。

这里是开发阶段,我们配置为 development。

以上,关于webpack打包的依赖包和配置就全部弄好了。结果如下:

最后,把webpack打包的指令配置在package.json中的scripts中即可。

webpack打包的指令就是webpack,我们放在build指令中:

下面执行打包,在根目录执行  npm run build  执行结果如下:

执行完成后,发现在根目录创建的dist文件夹,里面存放的就是被打包的文件index.js:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1041150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

org.quartz.SchedulerConfigException: DataSource name not set.

解决: JobStore配置 原: prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX"); 改为: prop.put("org.quartz.jobStore.class", "org.springframework.scheduling.qu…

论文笔记:ST2Vec: Spatio-Temporal Trajectory SimilarityLearning in Road Networks

2022 KDD 1 intro 现有的轨迹相似性学习方案强调空间相似性而忽视了时空轨迹的时间维度,这使得它们在有时间感知的场景中效率低下 如上图,在拼车过程中,T1表示司机计划的行程,T2和T3是两个想要搭车的人。T1和T2在空间上更接近&am…

Mac 苹果系统使用nvm use 切换node版本号

windows在使用 nvm 管理并切换 node 时,通过 nvm use 切换node版本会全局切换。也就是node版本号切换后只要不手动更改就会一直保持当前版本号不变。 但博主最近换了苹果系统后,发现苹果系统不能全局更改node版本。我在 vscode中使用nvm use x.x.x之后&…

Django(21):使用Celery任务框架

目录 Celery介绍Celery安装Celery使用项目文件和配置启动Celery编写任务调用异步任务查看任务执行状态及结果 设置定时和周期性任务配置文件添加任务Django Admin添加周期性任务启动任务调度器beat Flower监控任务执行状态Celery高级用法与注意事项给任务设置最大重试次数不同任…

东郊到家app小程序公众号软件开发预约同城服务系统成品源码部署

东郊到家app系统开发,东郊到家软件定制开发,东郊到家小程序APP开发,东郊到家源码定制开发,东郊到家模式系统定制开发 一、上门软件介绍 1、上门app是一家以推拿为主项,个人定制型的o2o平台,上门app平台提…

Nginx的反向代理、动静分离、负载均衡

反向代理 反向代理是一种常见的网络技术,它可以将客户端的请求转发到服务器群集中的一个或多个后端服务器上进行处理,并将响应结果返回给客户端。反向代理技术通常用于提高网站的可伸缩性和可用性,并且可以隐藏真实的后端服务器地址。 #user…

泡泡玛特城市乐园开园在即,知名潮玩IP落地北京朝阳

今年以来,文旅产业成为亮眼消费赛道,大IP主题乐园再次受到市场关注。优质IP可以为园区引流,帮助乐园摆脱门票经济,平衡收入结构。 国内“潮玩第一股”泡泡玛特近日宣布,国内首个潮玩行业沉浸式IP主题乐园——泡泡玛特…

内存对齐--面试常问问题和笔试常考问题

1.内存对齐的意义 C 内存对齐的主要意义可以简练概括为以下几点: 提高访问效率:内存对齐可以使数据在内存中以更加紧凑的方式存储,从而提高了数据的访问效率。处理器通常能够更快地访问内存中对齐的数据,而不需要额外的字节偏移计…

hadoop组件HDFS

HDFS里面的几个组件,分别有哪些功能和作用? Namenode:主角色,负责和客户端进行沟通.Datanode:从角色,负责存储数据Secondary namenode:秘书,服务器数据的收集,将信息传递给namenode注:Namenode宕机时集群会通过选举机制&#xff…

vue安装依赖报错install i 报错提示npm audit fix --force,or `npm audit` for details

vue项目执行npm install初始化后报错 run npm audit fix to fix them, or npm audit for details 出现这类提醒,按照如下操作进行 1、首先安装模块依赖: npm install (npm audit fix 含义: 检测项目依赖中的漏洞并自动安装需要…

Java笔记三

包机制: 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。 包语句的语法格式为:pack pkg1[. pkg2[. pkg3...]]; 般利用公司域名倒置作为包名;如com.baidu.com,如图 导包: 为了能够…

协议-TCP协议-基础概念03-Keep live保活机制-TCP RST-TCP连接

Keep live保活机制-TCP RST-TCP连接 参考来源: 《极客专栏-网络排查案例课》 Keep live保活机制 定时发送心跳探测包; 对于心跳回复包有超时限制; 要打开这个 TCP Keep-alive 特性,你需要使用 setsockopt() 系统调用&#xff0…

Ps:缩放工具

缩放工具 Zoom Tool 常用于对图像进行视图上的放大和缩小。在查看图像细节、处理图像时极为常用。 快捷键:Z ◆ ◆ ◆ 常用操作方法与技巧 1、快捷键 Z 是一个弹簧键。即,在其它工具的状态下,按住 Z 键不放就会临时切换到缩放工具&#xff…

什么是异步编程?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 处理异步操作的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打…

PHP8的继承和多态-PHP8知识详解

我们在前面的时候讲过《面向对象编程的特点》时,面向对象编程具有3大特点:封装性、继承性和多态性。 继承和多态的根本作用就是完成代码的重用。下面就来讲解php8的继承和多态。 1继承 子类可以继承父类的所有成员变量和成员方法,包括构造方…

Spring Boot与Spring Security的跨域解决方案

目录 一、什么是跨域问题 二、Spring Boot和Spring Security介绍 三、如何解决Spring Boot与Spring Security的跨域问题 一、什么是跨域问题 跨域问题(Cross-Origin Resource Sharing,简称CORS)是指在Web开发中,浏览器出于安全…

美轮美奂,尽在眼前——Aerial for Mac 高清鸟瞰屏保程序

想要让您的 Mac 屏幕焕发别样风采?那么,Aerial for Mac 高清鸟瞰屏保程序一定不容错过。这款应用程序将为您带来最优质的高清鸟瞰视频壁纸,让您的屏幕焕发无限活力和美感。 Aerial for Mac 高清鸟瞰屏保程序是一款专为 Mac 设计的屏幕保护程…

Unity之Hololens开发如何实现UI交互

一.前言 什么是Hololens? Hololens是由微软开发的一款混合现实头戴式设备,它将虚拟内容与现实世界相结合,为用户提供了沉浸式的AR体验。Hololens通过内置的传感器和摄像头,能够感知用户的环境,并在用户的视野中显示虚拟对象。这使得用户可以与虚拟内容进行互动,将数字信…

Vue组件库Element

目录 Vue组件库ElementElement简介Element快速入门环境配置Element常用组件Table表格Table表格演示Table表格属性详解 Pagination分页Pagination分页演示Pagination分页属性详解Pagination分页事件详解 Dialog对话框Dialog对话框组件演示Dialog对话框属性详解 Form表单Form表单…

两横一纵 | 寅家科技发布10年新征程战略

2023年9月22日,寅家科技“寅路向前”10年新征程战略发布会在上海举办,来自投资领域的东方富海、深创投、高新投等知名投资机构,一汽大众、一汽红旗、奇瑞汽车等主机厂,国家新能源汽车技术创新中心、梅克朗、芯驰科技、思特威等合作…