首页 > 其他分享 >webpack 是什么

webpack 是什么

时间:2023-08-20 23:55:20浏览次数:42  
标签:index 什么 js webpack html loader css

转载请注明 来源:http://www.eword.name/
Author:eword
Email:[email protected]

webpack 是什么

Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。

img

从图中我们可以看出,Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件,减少了页面的请求。

webpack可以叫“静态模块打包器”。

一、webpack的初体验

1.1、初始化环境

> npm init

1.2、安装 webpack

#本地目录 安装 webpack 及配套的 webpack-cli
> npm i webpack webpack-cli -D

#全局 安装 webpack 及配套的 webpack-cli
> npm i webpack webpack-cli -g

#本地目录 安装 webpack 及指定版本3.*的 webpack-cli
> npm i webpack webpack-cli@3 -D

#当前学习笔记所使用的版本如下
> npm i [email protected] [email protected] -D

1.3、运行指令

1.3.1、创建入口js文件

// index. js: webpack入口起点文件
// 路径: ./src/index.js
function add(x, y){
    return x + y;
}
console.log(add(1, 2));

1.3.2、开发环境运行

# 开发环境
# webpack会以./src/index.js为入口文件开始打包,打包后输出到./build/built.js整体打包环境,是开发环境
> webpack ./src/index.js -o./build/built.js --mode=development

1.3.3、生产环境运行

# 生产环境
# webpack会以./src/index.js为入口文件开始打包,打包后输出到./build/built.js整体打包环境,是生产环境
> webpack ./src/index.js -o ./build/built.js --mode=production
  • 结论:

    1、 webpack能处理js/json资源,不能处理css/img等其他资源

    2、生产环境和开发环境将ES6模块化编译成浏览器能识别的模块化

    3、生产环境比开发环境多一个压缩js代码

二、使用 webpack.config.js 配置执行打包

创建如下初始目录和文件

.

├── src
│   ├── index.css
│   ├── index.html
│   ├── index.js
│   ├── logo1.png
│   ├── logo2.png
│   └── logo3.png
└── webpack.config.js

2.1、index各文件内容

<!-- 文件路径 ./src/index.html -->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>webpack 学习</title>
</head>

<body>
    <h1 id="title">hello webpack</h1>
    <div id="box1"></div>
    <div id="box2"></div>
    <div id="box3"></div>
    <img src="./logo2.png" alt="html中引用图片" />

</body>

</html>
/*
路径: ./src/index.css
*/
html,
body {
  margin: 0;
  padding: 0;
  height: 100%;
  background-color: Dpink;
}
#title {
  color: black;
}
#box1 {
  width: 100px;
  height: 100px;
  background-image: url('./logo1.png');
  background-repeat: no-repeat;
  background-size: 100% 100%;
}
#box2 {
  width: 200px;
  height: 200px;
  background-image: url('./logo2.png');
  background-repeat: no-repeat;
  background-size: 100% 100%;
}
#box3 {
  width: 300px;
  height: 300px;
  background-image: url('./logo3.png');
  background-repeat: no-repeat;
  background-size: 100% 100%;
}

/*
index.js: webpack入口起点文件
路径: ./src/index.js
*/

// 引入样式资源
import './index.css';

function add(x, y)
{
    return x + y;
}

console.log(add(1, 2));

2.2、webpack.config.js 配置文件内容

/*
    webpack.config.js webpack的配置文件
    作用:指示webpack干哪些活(当你运行webpack指令时,会加载里面的配置)所有构建工具都是基于nodejs平台运行的~模块化默认采用commonjs.
    loader: 1.下载 2.使用(配置loader)
    plugins: 1.下载2. 引入 3.使用

    路径: ./webpack.config.js
*/

// resolve用来拼接绝对路径的方法
const { resolve } = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    // webpack配置
    // 入口起点文件
    entry: './src/index.js',
    // 输出
    output: {
        //输出文件名
        filename: 'built.js',
        //输出路径
        //__dirname nodejs的变量,代表当前文件的目录绝对路径
        path: resolve(__dirname, 'build')
    },
    // loader的配置
    module: {
        rules: [
            //打包 css 文件的详细loader配置
            {
                //匹配哪些文件
                test: /\.css$/,
                //使用哪些loader进行处理
                use: [
                    // use数组中loader执行顺序:从右到左,从下到上依次执行
                    //创建style标签,将js中的样式资源插入进行,添加到head中生效
                    'style-loader',
                    //将css文件变成commonjs模块加载js中,里面内容是样式字符串
                    'css-loader'
                ]
            },
            {
                //问题:默认处理不了 html 中的 img 图片
                //处理图片资源
                test: /\.(jpg|png|gif)$/,
                //使用一个loader
                //下载url-loader file-loader
                loader: 'url-loader',
                options: {
                    //图片大小小于8kb,就会被base64处理
                    //优点:减少请求数量(减轻服务器压力)
                    //缺点:图片体积会更大(文件请求速度更慢)
                    limit: 8 * 1024,
                    //问题:因为url-loader默认使用es6模块化解析, 而html-loader默认引入图片是commonjs
                    //解析时会出问题: [object Module]
                    //解决:关闭url-loader的es6模块化,使用commonjs解析
                    esModule: false,
                    // 给图片进行重命名
                    //[hash:10]取图片的hash的前10位
                    // [ext]取文件原来扩展名
                    name: '[hash:10].[ext]'
                }
            },
            {
                test: /\.html$/,
                //处理html文件的img图片(负责引入img,从而能被url-loader进行处理)
                loader: 'html-loader',
                options:
                {
                    //默认情况下,生成使用ES块语法的Js模块
                    //问题:生成的图片显示错误
                    //解决: esModule改为false
                    esModule: false,
                },
            }
        ]
    },
    // plugins的配置
    plugins: [
        //详细的plugins配置
        //html-webpack-plugin
        //功能:默认会创建一个空的HTML, 自动引入打包输出的所有资源(JS/CSS)
        //需求:需要有结构的HTML文件
        new HtmlWebpackPlugin({
            //复制../src/index.html'文件,并自动引入打包输出的所有资源(JS/CS5)
            template: './src/index.html'
        })
    ],
    //模式  development  开发环境,production 生产环境
    mode: 'development',
    // mode: 'production'
}

2.3、安装 loader 和插件

在项目文件夹下打开终端运行以下命令

# 打包css 文件时用到css-loader和style-loader
> # 安装 style-loader和css-loader
> npm i css-loader style-loader -D

# 打包图片文件用到url-loader 和 file-loader
# 安装 url-loader 和 file-loader 
> npm i url-loader file-loader  -D
# html 中引用了图片需要用到 html-loader
> # 在安装 url-loader 和 file-loader 的基础上安装 html-loader
> npm i html-loader -D

#打包 html 文件用到html-webpack-plugin 插件
# 安装 html-webpack-plugin 插件
> npm i html-webpack-plugin -D

2.4、执行打包

在项目文件夹下打开终端运行以下命令

> webpack

2.5、打包完后目录结构

.
├── build
│   ├── 2bd7a1d86f.png
│   ├── be0c215ecf.png
│   ├── built.js
│   └── index.html
├── src
│   ├── index.css
│   ├── index.html
│   ├── index.js
│   ├── logo1.png
│   ├── logo2.png
│   └── logo3.png
├── package-lock.json
├── package.json
└── webpack.config.js

其中 build 文件内的内容就是 webpack打包出来的产物,css 文件和小于8 kb的图片都被打包进入了 built.js 文件

标签:index,什么,js,webpack,html,loader,css
From: https://www.cnblogs.com/eword/p/webpack202107010.html

相关文章

  • webpack 五大核心概念
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]五大核心概念一、Entry入口(Entry)指示Webpack以哪个文件为入口起点开始打包,分析构建内部依赖图。二、Output输出(Output)指示Webpack打包后的资源bundles输出到哪里去,以及如何命名。......
  • webpack学习笔记所使用的版本信息
    学习笔记所使用的版本信息学习笔记用到的npm包版本信息[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]......
  • 了解什么是vlan
    VLAN(VirtualLAN)是一种虚拟局域网技术,可以将物理上分散的设备连接在同一个逻辑上的局域网中,以实现更高效、更灵活的网络管理和控制。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域。VLAN技术通过将不同的网络设备(如交换机、路由器、服务器等)根据其所属的逻辑群组进行隔......
  • 什么是AIGC?AIGC有什么用?
    一、AIGCAIGC,全名“AIgeneratedcontent”,又称生成式AI,意为人工智能生成内容。例如AI文本续写,文字转图像的AI图、AI主持人等,都属于AIGC的应用。具体展示情况如下:1)文字创作。AIGC生成文字目前主要被应用于新闻的撰写、给定格式的撰写以及风格改写。比如用户可以通过输入一段对于目......
  • AIGC技术到底是什么?
    AIGC技术到底是什么?AIGC(ArtificialIntelligenceinGameCreation)技术是指利用人工智能技术来辅助游戏创作的过程。它可以通过机器学习、深度学习和自然语言处理等技术,从大量的游戏数据中提取规律和模式,进而生成游戏的内容、关卡设计、角色行为等元素。 AIGC技术可以帮助游戏......
  • 什么是切面 Aspect?&Spring通知有哪些类型?
    什么是切面Aspect?切面(Aspect)是面向切面编程(AOP)的核心概念之一。它表示一个模块化的、可重用的关注点,它横跨多个对象,并通过将这些横切关注点(cross-cuttingconcerns)从核心业务逻辑中分离出来,可以实现更好的代码组织和更高的可维护性。在AOP中,切面用于捕获并定义一组横切关注点,这......
  • Jmeter中的ramp-up时间指的是什么?请举说明
    在JMeter中,ramp-up时间指的是测试中逐渐增加并发用户数的时间。它表示从测试开始到达最大并发用户数所需的时间。举例说明:假设我们需要对一个网站进行性能测试,设置最大并发用户数为100,并且希望在30秒内逐渐增加并发用户数。那么,ramp-up时间就是30秒。在测试开始时,JMeter会逐渐......
  • iBooker 技术评论 20230820:为什么我特别反感游戏佬
    好吧,其实我也打游戏,但是我主业是一名独立开发者,和AI研究员。这就导致了即使我打游戏,需求也和游戏佬是不同的。游戏加载依赖硬盘的顺序读写,而我做RPA处理大量小文件,更依赖硬盘的随机读写。游戏佬的游戏互联网上全是,不需要太多的数据安全,只需要大容量就够了。而我作为数字产品......
  • 为什么NoSQL不支持事务
    为什么NoSQL不支持事务1.背景看书《Neo4j权威指南》的时候,发现个问题:日常的NoSQL都不支持事务(ACID)。2.问题事务对数据的存储过程是有利的,既然事情是有利的,理论上存储型数据库都应该支持事务。但事实上是只有很少的一部分数据库支持事务,比如MySQL,Neo4j,并且MySQL也只有部分存......
  • 快速理解什么是 JavaScript 的继承
    其实JavaScript中的继承,就是指的是一种机制,它允许一个对象(子对象)获取另一个对象(父对象)的属性和方法。这样的话子对象可以重用父对象的代码,同时还可以添加自己的特定功能。JavaScript是使用原型继承的方式来实现对象之间的继承关系。首先你肯定得知道一些基本概念:对象:在JavaScrip......