为什么要用webpack?

为什么要用webpack?

目录

初识webpack

webpack基本使用

补充

安装配置webpack-dev-server

安装配置 html-webpack-plugin

关于webpack中的loader

打包处理css文件

打包处理less文件

打包处理样式表中的与url有关的文件

处理js中的高级语法

关于项目发布

初识webpack

早期的前端开发,用 HTML + CSS + JavaScript就可以了,把这些丢到浏览器中,浏览器就会显示出一个网页。

后期为了更快的进行前端的开发,产生许多库,如操作DOM的jquery,操作css的Less等,这个时候前端程序员是舒服了,可浏览器不认识了,它没学啊。

这时候就要利用一些工具将这些语言‘翻译’给浏览器,一个两个还好,当这些小工具多了的时候,不光维护麻烦,操作也麻烦,这时webpack诞生了。使用webpack来统一的管理这些编译小工具。可以理解为:由一个大工具管理一堆小工具,而我们只需要管理大工具就可以了。

Webpack是前端资源的构建工具,也是静态模块打包器。提供 压缩,合并,解决兼容问题

webpack基本使用

非必要,会有脚本架自动生成相关配置,这里主要是主要是走一遍项目创建流程,体验一下webpack

1、创建空项目文件夹---全英文名 ,这里名字为Demo

2、进入当前文件的终端运行 npm init -y ,初始化包管理配置文件,此时空文件夹内会自动生成一个package.json 文件。

【不知道npm是什么命令,没关系,可以先了解下node.js。node.js主要是将浏览器用于解析JS语言的引擎给分离了出来,让JS不通过浏览器也能运行。npm命令就是集成在node.js中的,主要用于管理节点插件(包括安装、卸载和管理依赖关系等)。】

3、在项目文件夹内新建src 文件夹,并在里面新建 index.html 首页 和 index.js 脚本文件

4、初始化html文件 【 vscode 快捷键(!+ tab)】,写上相关结构,如多个列表

  • 这是第1个li
  • 这是第2个li
  • 这是第3个li
  • 这是第4个li
  • 这是第5个li
  • 这是第6个li
  • 这是第7个li
  • 这是第8个li
  • 这是第9个li

5、在当前项目的终端终端运行 npm install jquery -S ,下载jquery,用于对页面结构进行快速操作。【-S 是 --save的缩写,将包信息写入package.json文件中的"dependencies"下】

6、在index.js 文件内通过 import $ from 'jquery' 导入jquery库【记得带 ‘ ’ 号】,并进行相关操作的编写,如实现单双列表的隔行变色。

import $ from 'jquery'

$(function(){

$('li:odd').css("background-color","red")

$('li:even').css('background-color','pink')

})

7、此时在html的 头标签内 ,引入并运行是有问题的,因为浏览器不能识别 jquery 语法。因此列表的格式未发生变化。

通过webpack来解决这个问题。

8、安装webpack,在项目终端运行以下命令,安装webpack相关的包文件

npm install webpack@5.73.0 webpack-cli@4.10.0 -D

-D 将文件写入package.json文件中的"devDependencies"下

-S 和-D的区别是,一个只在开发中会用到,项目正式上线时就不存在了

9、在项目根目录中,创建名为webpack.config.js的配置文件,并初始化以下配置:

module.exports = {

mode: 'development'

}

//mode 用来构建模式的可选值有两个

// 1.development 开发环境,不会对打包生成的文件进行代码压缩和性能优化,且打包速度快,

// 适合在开发阶段使用。

// 2.production 生产环境,会对打包生成的文件进行代码压缩和性能优化,且打包速度很慢,

// 仅适合在项目发布阶段使用。

webpack.config.js是webpack的配置文件,webpack在真正开始打包构建之前,会先读取这个配置文件,从而基于给定的配置,对项目进行打包。

10、在package.json文件中的scripts节点下,新增脚本

"scripts": {

"dev": "webpack"

}

//dev只是个名称,可以更具自己的喜好更改

11、在项目终端运行 npm run dev

在webpack中默认的打包入口文件为src下的index.js文件,默认的输出文件路径为自动生成的dist 下的main.js文件。

12、更改html中

13、此时再次运行会发现已经成功了。

补充

我们在运行 npm run dev 时,会先读取 webpack.config.js 的配置文件 , 然后再执行webpack,根据这个特性,我们还可以进行进一步的修改,调整。

webpack中默认的打包入口为 src->index.js 默认的输出文件路径为dist->main.js 我们可以在webpack.config.js 配置文件中通过entry节点指定打包入口,通过output节点指定打包的出口

const path =require('path') // 导入node.js中的专门操作路径的模块

module.exports={

entry:path.join(__dirname,'./src/index.js'), //打包文件的入口文件的路径

output:{

path:path.join(__dirname,'./dist'), //出口

filename:'main2.js'},

mode:'development'

}

dist文件夹下出现了新的js文件。

在上述阶段,会发现,只要我们能稍微就改下 index.js 中的代码就需要重新run一次,才能看到修改后的页面,对于懒人程序员来说,可能会直接放弃这一行业,十分不友好。我们希望一修改代码页面就能看出变化。因此webpack中提供了两个插件来解决这个问题。 webpack-dev-server 和 html-webpack-plugin 下载并配置就可以。

安装配置webpack-dev-server

下载:npm install webpack-dev-server -D 【这里没有@指定版本,默认安装最新版。合格的程序猿需要跟上最新版,并解决可能出现的问题】

配置:修改 package.json -->scripts 中的 脚本命令 【这里改了个名字,将dev改为了test,实际上没什么影响】

再次运行:npm run test

这个时候会发现终端没有直接结束,而是在等待阶段,这个时候只要修改了index.js 中的代码,就会自动进行webpack的打包操作。

然而问题来了,我们会发现页面并没有根据我们的修改而进行相应的改变。这是因为vscode中的打开方式为 file 协议,而我们需要通过 http://localhost:8080/ 才能访问,

然而问题又来了,输入地址后浏览器不仅访问不到我们想要的界面,反而帅气的丢出了404。【为什么和我学的不一样,我好烦】

我们返回去看 npm run test 运行时的提示,好像也看不出什么。。。。【这可能就是新版带来的痛苦】。通过查找资料发现,我们需要在 webpack.config.js 进行相关的设置

module.exports={

entry:path.join(__dirname,'./src/index.js'), //打包文件的入口文件的路径

output:{

path:path.join(__dirname,'./dist'), //出口

filename:'main.js'},

mode:'development',

devServer: {

static:'./',//根目录,需要点击进入src才能查看

//static:path.join(__dirname, 'src'),//可以直接访问到src页面,实现页面的实时查看。

host: "localhost",

port: 8080,

hot: true,

},

}

将 static:path.join(__dirname, 'src'),这样设置就可以直接访问到src页面,实现页面的实时查看。无需安装 html-webpack-plugin 了,这可能是新版带来的好处吧。。。

补充【重要!!!】: npm run test 是通过webpack 将js 文件改写成浏览器能识别的文字。webpack-dev-server插件能提供快速打包访问是因为它将打包后的js文件直接存入了内存当中,【磁盘中访问不到,但通过浏览器输入文件名却能真实看到】这个时候我们需要更改html文件中的