打包工具——webpack的简单使用

1.当前 Web 开发面临的困境

  • 文件依赖关系错综复杂
  • 静态资源请求效率低
  • 模块化支持不友好
  • 浏览器对高级 Javascript 特性兼容程度较低

2.webpack 概述

webpack 是一个流行的前端项目构建工具(打包工具),可以解决当前 web 开发中所面临的困境。
webpack 提供了友好的模块化支持,以及代码压缩混淆处理 js 兼容问题性能优化等强大的功能,从而让程序员把
工作的重心放到具体的功能实现上,提高了开发效率和项目的可维护性。

目前绝大多数企业中的前端项目,都是基于 webpack 进行打包构建的。

在这里插入图片描述

3.webpack 的基本使用

A.创建项目目录并初始化

创建项目,并打开项目所在目录的终端,输入命令:
npm init -y

B.创建首页及js文件

   在项目目录中创建index.html页面,并初始化页面结构:在页面中摆放一个ul,ul里面放置几个li
   在项目目录中创建js文件夹,并在文件夹中创建index.js文件

C.安装jQuery

​ 打开项目目录终端,输入命令:
npm install jquery -S

D.导入jQuery

​ 打开index.js文件,编写代码导入jQuery并实现功能:

   import $ from "jquery";$(function(){$("li:even").css("background","cyan");$("li:odd").css("background","pink");})

注意:此时项目运行会有错误,因为import $ from "jquery";这句代码属于ES6的新语法代码,在浏览器中可能会存在兼容性问题 所以我们需要webpack来帮助我们解决这个问题。

E.安装webpack

  1. 打开项目目录终端,输入命令:
    npm install webpack webpack-cli -D

  2. 然后在项目根目录中,创建一个 webpack.config.js 的配置文件用来配置webpack
    在 webpack.config.js 文件中编写代码进行webpack配置,如下:

 module.exports = {
        mode:"development"//可以设置为development(开发模式),        				production(发布模式)
    }

说明:mode设置的是项目的编译模式。
如果设置为development则表示项目处于开发阶段,不会进行压缩和混淆,打包速度会快一些
如果设置为production则表示项目处于上线发布阶段,会进行压缩和混淆,打包速度会慢一些

  1. 修改项目中的package.json文件添加运行脚本dev,如下:
 "scripts":{
        "dev":"webpack"
    }

注意:scripts节点下的脚本,可以通过 npm run 运行,如:
运行终端命令: npm run dev
将会启动webpack进行项目打包

  1. 运行dev命令进行项目打包,并在页面中引入项目打包生成的js文件
    打开项目目录终端,输入命令:
    npm run dev
    等待webpack打包完毕之后,找到默认的dist路径中生成的main.js文件,将其引入到html页面中。(dist文件夹与main.js是默认生成)
    浏览页面查看效果。

4.设置webpack的打包入口/出口

在webpack 4.x中
默认会将src/index.js作为默认的打包入口js文件
默认会将dist/main.js 作为默认的打包输出js文件
如果不想使用默认的入口/出口js文件,我们可以通过改变 webpack.config.js 来设置入口/出口的js文件,如下:

  const path = require("path");
    module.exports = {
        //设置开发模式 development——开发时使用  production——上线时使用
        mode:"development",
        //设置入口文件路径
        entry: path.join(__dirname,"./src/budle.js"),
        //设置出口文件
        output:{
            //设置路径
            path:path.join(__dirname,"./dist"),
            //设置文件名
            filename:"res.js"
        }
    }

5.设置webpack的自动打包

        默认情况下,我们更改入口js文件的代码,需要重新运行命令打包webpack,才能生成出口的js文件
       那么每次都要重新执行命令打包,这是一个非常繁琐的事情,那么,自动打包可以解决这样繁琐的操作。
        实现自动打包功能的步骤如下:

A.安装自动打包功能的包:webpack-dev-server

npm install webpack-dev-server -D

B.修改package.json中的dev指令如下:

       "scripts":{"dev":"webpack-dev-server"}

C.将引入的js文件路径更改为:

实时更新时在内存中的虚拟路径里 是我们看不见的
<script src="/bundle.js"></scrip> 绝对路径

D.运行npm run dev,进行打包

E.打开网址查看效果:http://localhost:8080

注意:webpack-dev-server自动打包的输出文件,默认放到了服务器的根目录中.我们在自己的本地目录中找不到,存在与虚拟内存中

6.配置自动打开网页

应用场景:不需要自己在搜索框上手动输入网址访问,npm rum dev 后会自动跳转到页面上
实现方式就是打开package.json文件,修改dev命令:

  • –open 打包完成后自动打开浏览器的配置,不写,使用默认浏览器打开
  • –host 配置 IP 地址
  • –port 配置端口
 "scripts":{
 	"dev": "webpack-dev-server --open 'google chorme' --host 127.0.0.1 --port 8080"
 }

7.配置html-webpack-plugin

使用html-webpack-plugin 可以生成一个预览页面,不用我们/src才打开入口文件。
​因为当我们访问默认的 http://localhost:8080/的时候,看到的是一些文件和文件夹,想要查看我们的页面还需要点击文件夹点击文件才能查看,那么我们希望默认就能看到一个页面,而不是看到文件夹或者目录。
​ 实现默认预览页面功能的步骤如下:

A.安装默认预览功能的包:html-webpack-plugin

npm install html-webpack-plugin -D

B.修改webpack.config.js文件,如下:

    //导入包const HtmlWebpackPlugin = require("html-webpack-plugin");//创建对象const htmlPlugin = new HtmlWebpackPlugin({//设置生成预览页面的模板文件
​                template:"./src/index.html",//设置生成的预览页面名称
​                filename:"index.html"
			//设置成index才会默认打开,内部机制})

C.继续修改webpack.config.js文件,添加plugins信息:

       module.exports = {
​                plugins:[ htmlPlugin ]}

8.webpack中的加载器

通过loader打包非js模块:默认情况下,webpack只能打包js文件,如果想要打包非js文件,需要调用loader加载器才能打包
loader加载器包含:
1).less-loader 可以打包处理 .less 相关的文件
2).sass-loader 可以打包处理 .scss 相关的文件
3).url-loader 打包处理css中与url路径有关的文件
4).babel-loader 处理高级js语法的加载器
5).postcss-loader 处理css的兼容
6).css-loader,style-loader 打包样式相关文件
注意:指定多个loader时的顺序是固定的,而调用loader的顺序是从后向前进行调用,后面是依赖前面的
在这里插入图片描述

8.1 打包处理 css 文件

① 运行 npm i style-loader css-loader -D 命令,安装处理 css 文件的 loader
② 在 webpack.config.js的 module -> rules 数组中,添加 loader 规则如下:

// 所有第三方文件模块的匹配规则
module.exports = {
	module: {
		rules: [
		//						css-loader要写在style-loader后面
		{ test: /\.css$/, use: ['style-loader', 'css-loader'] }
		] 
	}
}

其中,test表示匹配的文件类型,use表示对应要调用的 loader
注意

  • use 数组中指定的 loader 顺序是固定的
  • 多个 loader 的调用顺序是:从后往前调用,后面依赖前面的

8.2 打包处理 less 文件

① 运行 npm i less-loader less -D 命令
② 在 webpack.config.js的 module -> rules 数组中,添加 loader 规则如下:

// 所有第三方文件模块的匹配规则
module: {
	rules: [
	{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }
] }

8.3 打包处理 scss 文件

① 运行npm i sass-loader node-sass -D 命令
② 在 webpack.config.js 的 module -> rules 数组中,添加 loader 规则如下:

// 所有第三方文件模块的匹配规则
module: {
	rules: [
	{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }
] }

补充:安装sass-loader失败时,大部分情况是因为网络原因,详情参考:
https://segmentfault.com/a/1190000010984731?utm_source=tag-newest

8.4 配置 postCSS 自动添加 css 的兼容前缀(-ie-,-webkit-)

① 运行 npm i postcss-loader autoprefixer -D 命令
② 在项目根目录中创建 postcss 的配置文件 postcss.config.js,并初始化如下配置:

const autoprefixer = require("autoprefixer");
module.exports = {
    plugins:[ autoprefixer ]
}

③ 在 webpack.config.js 的 module -> rules 数组中,修改 css 的 loader 规则如下:

module: {
rules: [
{ test:/\.css$/, use: ['style-loader', 'css-loader', 'postcss-loader'] }
] }

8.5 打包样式表中的图片以及字体文件

在样式表css中有时候会设置背景图片和设置字体文件,一样需要loader进行处理
使用url-loaderfile-loader来处理打包图片文件以及字体文件
① 运行 npm i url-loader file-loader -D 命令
② 在 webpack.config.js 的 module -> rules 数组中,添加 loader 规则如下:

module.exports = {
    module : {
        rules:[
            {
                test:/\.scss$/,
                use:['style-loader','css-loader','sass-loader']
            },{
                test:/\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
                //limit用来设置字节数,只有小于limit值的图片,才会转换为base64图片
                use:"url-loader?limit=16940"
            }
        ]
    }
}

base64格式,url显示不再是路径,是一堆字符,用于图片体积小的,加快其渲染速度
在这里插入图片描述

8.6 打包处理 js 文件中的高级语法

打包js文件中的高级语法:在编写js的时候,有时候我们会使用高版本的js语法
有可能这些高版本的语法不被兼容,我们需要将之打包为兼容性的js代码,我们需要安装babel系列的包
① 安装babel转换器
npm install babel-loader @babel/core @babel/runtime -D
② 安装babel语法插件包
npm install @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D
③ 在项目根目录创建并配置babel.config.js文件

   module.exports = {
        presets:["@babel/preset-env"],
        plugins:[ "@babel/plugin-transform-runtime", "@babel/plugin-proposal-class-properties" ]
    }

④ 配置规则:更改webpack.config.js的module中的rules数组

module.exports = {
    module : {
        rules:[
            {
                test:/\.js$/,
                use:"babel-loader",
                //exclude为排除项,意思是不要处理node_modules中的js文件
                exclude:/node_modules/
            }
        ]
    }
}

搭配参考文章:Vue 单文件组件与webpack的组合使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值