webpack

一、概念

是基于node的静态模块打包工具,分析翻译、压缩、打包代码,可以减少文件数量,缩减代码体积,提高网页打开速度

支持所有类型文件打包

支持less/sass=>css

支持ES6/7/8=>ES5

压缩代码,提高加载速度

二、使用步骤

1.安装

(1)初始化包环境得到package.json

npm init

(2)安装依赖包

npm add webpack webpack-cli -D

(3)配置scripts(自定义命令)

在package.json文件写下:

“scripts”:{

“build”:”webpack”

},

2.打包整合压缩js文件

文件目录如图所示:

(1)新建scr文件夹,在里面新建文件index.js,webpack会默认找src下的index.js文件作为打包入口(为固定形式)

(2)在src下新建add文件夹,在里面新建add.js文件,并在该js文件里定义一个求和函数并导出

export const addFn=(a,b)=>a+b;

(3)在index.js文件中引入add模块并使用函数输出结果

import{addFn} from './add/add.js'

console.log(addFn(10,20))

(4)执行npm run build自定义命令,进行打包(确保终端路径在src的父级文件夹)

(5)打包后默认生成dist和main.js文件

main.js内容如下:

import{addFn} from './add/add.js'

console.log(addFn(10,20))

总结:使用webpack:

src/index.js是入口文件

将所有代码引入到入口文件

执行npm run build打包命令

打包整合到dist/main.js出口文件内

3.更新打包

在src下新建tool文件,在里面创建tool.js文件,在该文件里定义数组求和函数并导出;

 // reduce对数组进行遍历,格式arr.reduce(函数体,变量初始值),该例给sum一个初始值0

export const getArraySum=arr=>arr.reduce((sum,val)=>{

    sum=sum+val;

    //设置下一次遍历执行函数体的sum值

    return sum; 

},0);

在src/index.js文件中引入tool模块的函数,并使用,打印结果

import{addFn} from './add/add.js'

import{getArraySum} from './tool/tool.js'

console.log(addFn(10,20));

console.log(getArraySum([5,4,3,2,1]))

执行npm run build自定义命令,进行打包(确保终端路径在src的父级文件夹),main.js文件内容为:

(()=>{"use strict";console.log(30),console.log([5,4,3,2,1].reduce(((o,e)=>o+e),0))})();

总结:更新打包时,新增的代码要被引入到入口处,然后再次执行npm run build

4.配置修改

配置文档:https://webpack.docschina.org/concepts/#entry

(1)新建出口文件src/main.js,并将所有代码引入其中

(2)在src外面新建 webpack.config.js ,在填入配置(直接在文档复制),然后修改入口文件名和出口文件名

const path = require('path');

//导出webpack配置对象

module.exports = {

    //webpack入口文件,要自己创建,并将代码引入其中

  entry: './src/main.js',

  output: {

    //path必须用绝对地址:path.resolve()拼接两个路径

    path: path.resolve(__dirname, 'dist'),

    //webpack出口文件,会自动创建,不用自己创建

    filename: 'bundle.js',

  },

};

// webpack基于node,所以导出遵守CommonJS规范

总结:

在src外面新建 webpack.config.js 配置文件

通过entry选项设置入口文件名

通过output对象设置出口路径和出口文件名

(3)执行npm run build即可打包

5.打包流程

6.隔行变色案例

用npm下载的包不能直接在前端上用

所以用webpack打包代码,jquery实现功能

(1)安装jquery:npm install jquery

(2)新建public/index.html,编写代码

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

</head>

<body>

    <!-- ul#myUL>li{我是$个li}*10 -->

    <ul id="myUL">

        <li>我是第1个li</li>

        <li>我是第2个li</li>

        <li>我是第3个li</li>

        <li>我是第4个li</li>

        <li>我是第5个li</li>

        <li>我是第6个li</li>

        <li>我是第7个li</li>

        <li>我是第8个li</li>

        <li>我是第9个li</li>

        <li>我是第10个li</li>

    </ul>

</body>

</html>

(3)在src/main.js引入jquery,编写js代码实现效果,

import $ from 'jquery'

// #表示id选择器,:后为伪类选择器

$("#myUL>li:nth-child(2n+1)").css('color','red')

$("#myUL>li:nth-child(2n)").css('color','green')

(4)然后执行打包命令npm run build,再把index.html复制到dist下(dist为出口文件所在目录),然后在html中引入打包后的js,运行index.html即可实现效果

    <script src="./bundle.js">

    </script>

文件目录如下:

效果如下:

总结:

npm下载的包如何作用在前端项目?

借助webpack,把模块和代码打包

把打包后的js文件引入到html中即可运行

7.自动生成html文件

配置文档:https://webpack.docschina.org/plugins/html-webpack-plugin/

(1)下载插件

npm install --save-dev html-webpack-plugin

cnpm install html-webpack-plugin@5.0.0-alpha.9

(2)编写配置文件:

webpack.config.js加入如下语句:

const path = require('path');

const HtmlWebpackPlugin = require('html-webpack-plugin');

//导出webpack配置对象

module.exports = {

    //webpack入口文件,要自己创建,并将代码引入其中

  entry: './src/main.js',

  output: {

    //path必须用绝对地址:path.resolve()拼接两个路径

    path: path.resolve(__dirname, 'dist'),

    //webpack出口文件,会自动创建,不用自己创建

    filename: 'bundle.js',

  },

  //插件

  plugins: [new HtmlWebpackPlugin({

    template:'./public/index.html'//webpack生成dist/index.html文件,要以template指定的路径下的html文件为模版

  })],

};

// webpack基于node,所以导出遵守CommonJS规范

(3)运行npm run build即可自动以指定的htm文件wield模版生成可以直接运行处想要效果的页面

8.打包css文件

webpack默认只识别js文件,所以当引入css文件后打包会报错

那么,要想处理css文件,还需要加载器

文档:

css-loader:https://webpack.docschina.org/loaders/css-loader/

style-loader:https://webpack.docschina.org/loaders/style-loader/

(1)安装css-loader:

npm install --save-dev css-loader

安装style-loader:

npm install --save-dev style-loader

添加配置:

module.exports = {

  //加载器

  module: {

    rules: [//规则数组

      {//一个规则对象

        test: /\.css$/i,//匹配.css文件,且忽略大小写

        use: ["style-loader", "css-loader"],

        //加载器会从右向左使用

        //css.loader会识别.css文件,并将代码打包进js文件中

        //style.loader负责把js里的样式代码插入到DOM中

      },

};

(2)新建src/scc/index.css,编写去除li圆点样式的代码

li{

    list-style:none;

}

(3)引入入口文件src/main.js中

import './css/index.css'

(4)执行打包命令

npm run build

(5)打开html文件

总结:

webpack如何支持css打包?

依赖css-loader和style-loader并配置

打包后样式代码在出口的js文件中

样式如何生效?
style-loader会把代码样式插入到head内style标签内

9.处理less文件

less-loader文档:https://webpack.docschina.org/loaders/less-loader/

(1)新建src/less/index.less,设置li字体大小

(2)把index.less引到入口文件内

import './less/index.less'

(3)下载加载器来处理less文件

安装less和less-loader

作用:less把less语法翻译成css

less-loader识别.less文件

npm install less less-loader--save-dev

(4)webpack.config.js针对less配置

module.exports = {

  module: {

    rules: [

      {

        test: /\.less$/i,

        use: [

          // compiles Less to CSS

          'style-loader',

          'css-loader',

          'less-loader',

        ],

      },

    ],

  },};

(5)打包

npm run build

10.处理图片文件

asset module(资源模块)技术:资源模块 | webpack 中文文档

(1)打包图片文件

1)css/index.less,小图片作为背景

body{

    background:url('../assets/images/small.png') no-repeat center center;

}

2)src/main.js,大图片创建img插入到DOM

//小图:css背景(图片用的路径字符串)

//大图:js中,用import导入的方式

import imgObj from './assets/images/big.gif'

let theImg=document.createElement('img')

theImg.src=imgObj

document.body.appendChild(theImg)

3)webpack.config.js添加对图片的配置

module: {   

 rules: [         // ...省略其他       

 {  test: /\.(png|jpg|gif|jpeg)$/i, // 匹配图片文件             type: 'asset' // 在导出一个 data URI 和一个单独的文件之间自动选择        

}

]

}

(2)图片处理区别

asset在导出一个data URL和发送一个单独文件之间自动选择。之前通过url-loader,并且配置资源 体积限制实现

默认8kb以下图片, 转成base64字符串,打包进js中, 减少网络请求次数

超过8kb的图片, 直接复制到dist下并重命名, 转base64会增加30%体积

11.处理字体文件

asset module(资源模块)技术:资源模块 | webpack 中文文档

(1)src/main.js引入字体样式iconfont.css

 import "./assets/fonts/iconfont.css"

(2)src/main.js创建i标签使用字体,插入DOM上

//创建i标签

let theI=document.createElement('i');

theI.className="iconfont icon-qq"

//追加到body标签

document.body.appendChild(theI) 

(3)webpack.config.js配置规则

{     test: /\.(eot|svg|ttf|woff|woff2)$/,    type: 'asset/resource',  // 当做静态资源直接复制文件   

 generator: {

   filename: 'font/[name].[hash:6][ext]' // 放到dist/font文件夹, 文件名格式如左  

  }}

12.处理高版本js语法

babel:是一个JavaSript编译器,可以读取用户写的js代码,然后将其翻译输出成浏览器兼容的js代码

babel官网:Babel 中文文档 | Babel中文网 · Babel 中文文档 | Babel中文网

babel-loader文档:https://webpack.docschina.org/loaders/babel-loader/

(1)在src/main.js文件中定义箭头函数,并打印箭头函数变量(千万不能调用,因为打包时会因为该函数调用之后就没有用了而不将其打包)

//观察webpack是否降级js代码

let fn=()=>{

    console.log(123)

};

//使用fn并不是加()去调用fn,而是将fn的函数体打印出来,这样打包时才会把函数体留下来

console.log(fn)

(2)下载加载器

npm install -D babel-loader @babel/core @babel/preset-env

@babel/core:JS编译器,分析代码

@babel/preset-env:babel预设,降级规则

@babel-loader:让webpack翻译js代码

(3)配置到webpack.config.js上

module:{

rules:[

{

      test: /\.m?js$/, // 匹配.mjs或.js结尾文件

      exclude: /(node_modules|bower_components)/, // 排除node_modules第三方包里的js文件,不转换这2个文件夹里的js

      use: {

          loader: 'babel-loader', // 使用加载器-处理,允许webpack使用babel降级编译js代码

          options: {

              presets: ['@babel/preset-env'] // 预设:转码规则(用bable开发环境本来预设的规则)

          }

      }

  }

],

}

(4)打包

npm run build

三、webpack开发服务器

可实现自动打包和更新

webpack-dev-server文档:https://webpack.docschina.org/configuration/dev-server/

1.使用

(1)下载模块包

npm install --save-dev webpack-dev-server

(2)在package.json里自定义webpack开发服务器启动命令serve

scripts: {

"build": "webpack",

"serve": "webpack serve"

}

(3)运行命令,启动webpack开发服务器

npm run serve

(4)进入页面127.0.0.1:8080

(5)重新编写代码,观察控制台和浏览器是否自动打包和更新

2.配置

webpack-dev-server配置文档:https://webpack.docschina.org/configuration/dev-server/#devserverafter

(1)webpack.config.js中添加服务器配置

module.exports = {  

  // ...其他配置    

devServer: {    

   port: 3000, // 端口号   

   open: true // 启动后自动打开浏览器 

   }

}

(2)重启webpack开发服务器观察效果即可

四、项目打包发布

1.代码环境

代码分为开发和生产两个环境

线下:开发环境,development

线上:生产环境,production

2.webpack.config.js修改webpack配置

(1)修改为开发环境

module.exports = {   

 // ...其他配置    

mode: 'development' // 开发环境-> 不会极致压缩, 一般开发服务器默认使用这个属性

}

(2)修改为生产环境

module.exports = {  

  // ...其他配置

mode: 'production'  // 生产环境-> 会极致压缩, 一般上线npm run build会自动采用这个模式

}

3.发布

运行npm run build,得到dist目录,发给后台/运维部署到服务器上

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值