webpack5_相关知识点

news2025/1/15 18:36:08

webpack是一个现代JavaScript应用程序的静态模块打包器(module bundler) ,是前端资源模块化管理和打包工具, 它可以将许多松散耦合的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分离,等到实际需要时再异步加载。通过 loader转换, 任何形式的资源都可以当做模块, 比如Commons JS、AMD、ES 6、CSS、JSON、Coffee Script、LESS等。

一、概念

依赖环境:Node JS16+

下载并安装Node。

Node下载安装相关内容点击链接看这个文章icon-default.png?t=N7T8https://blog.csdn.net/zxy19931069161/article/details/138838537?spm=1001.2014.3001.5502

为什么需要打包:开发时用到的框架(React、Vue),ES6模块化语法、LESS/SASS等CSS预处理器等语法进行开发,这样代码想在浏览器运行必须编译成浏览器识别的JS、CSS、等语法才能运行。所以需要打包工具做这些,除此之外还有压缩代码、兼容性处理、提升代码性能等。一些打包工具:(Webpack、Grunt、Gulp、Parcel、Rollup、Vite等)

Webpack基本概念:是一个静态资源打包工具,它会以一个或多个文件作为打包的入口,将整个项目的所有文件编译成一个或多个文件输出出去。输出的文件就是编译好的文件,就可以在浏览器运行了。将webpack输出的文件叫做bundle。

Webpack本身功能是有限的:

        开发模式:仅能编译ES Module语法。

        生产模式:能编译JS中ES Module语法,还能压缩JS代码。

但可以通过各种插件完成相关功能。

二、建一个Webpack项目

1.新建项目文件夹

项目名称webpack-code,并用编辑器或cmd打开,使用终端进行以下步骤。

2.初始化项目

webpack-code文件夹中初始化一个package.json文件和package-lock.json文件。

npm init -y

package.json文件和package-lock.json文件区别:

npm5以前

npm5以前,没有package-lock.json这个文件。

package.json 是一个描述项目的元数据文件。它包含了项目的名称、版本、作者、许可证等信息。当你执行npm install的时候,node会先从package.json文件中读取所有dependencies信息,然后根据dependencies中的信息与node_modules中的模块进行对比,没有的直接下载,已有的检查更新。

因为package.json只能锁定模块的大版本号(版本号的第一位),不能锁定后面的小版本,所以你每次重新npm install时候拉取的都是该大版本下面最新的版本。一般我们为了稳定性考虑我们不能随意升级依赖包,因为如果换包导致兼容性bug出现很难排查,这样很容易出现问题,所以package-lock.json就是来解决包锁定不升级问题的。另外,package.json文件只记录你通过npm install方式安装的模块信息,而这些模块所依赖的其他子模块的信息不会记录。

npm5以后

package-lock.json文件锁定所有模块的版本号,包括主模块和所有依赖子模块。当你执行npm install的时候,node从package.json文件读取模块名称,从package-lock.json文件中获取版本号,然后进行下载或者更新。因此,正因为有了package-lock.json文件锁定版本号,所以当你执行npm install的时候,node不会自动更新package.json文件中的模块,必须用npm install packagename@x.x.x(指定版本号)来进行安装才会更新,package-lock.json文件中的版本号也会随着更新。

3.webpack-code项目资源目录

4.下载Webpack:
npm i webpack

npm i webpack-cli

webpack -v   //检查webpack是否下载成功返回版本

5.启动Webpack:

开发模式终端输入: npx webpack ./src/main.js --mode=development

生产模式终端输入: npx webpack ./src/main.js --mode=production

npx是什么:

npx是一个由Node.js官方提供的用于快速执行npm包中的可执行文件的工具。它可以帮助我们在不全局安装某些包的情况下,直接运行该包提供的命令行工具。npx会在执行时,检查本地项目中是否安装了对应的依赖,如果没有安装则会自动下载安装,并执行命令。如果本地已经存在该依赖,则直接执行命令。

6.Webpack 的五大核心概念:

        1.entry(入口): 指示webpack从哪个文件开始打包。

        2.output(输出):指示webpack打包完的文件输出到哪里去,如何命名等。

        3.loader(加载器):webpack本身只能处理js、json等资源,其他资源需要借助loader,webpack才能解析。

        4.plugins(插件):扩展webpack的功能。

        5.node(模式):主要有两种模式(开发模式:development)(生产模式:production)

7.添加webpack配置文件:

webpack-code项目根目录下创建一个配置文件 webpack.config.js


const path = require("path");
// path是node.js的核心模块,用来处理文件路径
 
module.exports = {
    // 入口,相对路径和绝对路径都行
    entry: "./src/main.js",
    output: {
        // path: 文件输出目录,必须是绝对路径
        // path.resolve()方法返回一个绝对路径
        // __dirname 当前文件的文件夹绝对路径
        path: path.resolve(__dirname, "dist"),
        // filename: 输出文件名
        filename: "main.js",
    },
    module: {
        rules: [],
    },
    plugins: [],
    mode: "development", 
};

配置完成以后使用 npx webpack 就可以运行项目。

8.打包示例:

在创建的src->js目录下->sum.js里面添加内容:

export default function sum(a, b) {
    return a + b
}

在main.js 里面通过import 引用sum.js:

import sum from './js/sum.js'
console.log(sum(1, 2));

 执行 npx webpack,则打包后main.js在dist文件夹下。

在public->index.html文件中引入main.js。

<!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>Document</title>
</head>
 
<body>
    <script src="../../dist/main.js"></script>
    <h2>hello webpack</h2>
</body>
 
</html>

此时控制台输出了sum(1,2)的结果

9.自动清空上次打包内容:

自动删除上次的dist。在webpack.config.js的output中filename下添加clean:true。当设置为 true 时,webpack 在每次构建之前会自动清理目标文件夹。这可以确保每次构建时都会生成一个干净的输出文件夹,删除旧的构建结果。

    output: {
        filename: "main.js", //在下面添加
        clean: true,
    },
10.Webpack处理js文件:

webpack对js处理有限,只能编译js中ES模块化语法,不能编译其他语法,由于某些浏览器不支持ES6,所以使用ES6写的JavaScript程序不能在这些浏览器中运行,需要进行兼容。(一些不支持ES6的浏览器:IE浏览器、苹果内置浏览器、PC版微信内置浏览器、旧版本的Chrome等)。

        ①针对js兼容性处理:用Babel完成。

        ②针对代码格式,用ESlint(用来检测js和jsx的语法工具)完成。

先完成ESlint检测代码格式无误后,在由Babel做代码兼容性处理。

ESlint使用方法icon-default.png?t=N7T8https://webpack.docschina.org/plugins/eslint-webpack-plugin/#rootBabel使用方法icon-default.png?t=N7T8https://webpack.docschina.org/loaders/babel-loader/#root

11.自动生成html文件:

public下的index.html是我们手动写的还需要引入打包后的文件。可以通过插件来自动生成一个index.html(在dist文件夹下),里面直接自动引入所有打包后的文件。使用npx webpack打包后,我们就可以直接运行dist文件夹下的index.html。

自动生成html步骤icon-default.png?t=N7T8https://webpack.docschina.org/plugins/html-webpack-plugin#root

12.搭建开发服务器&自动化:

每次写完代码手动输入指令才能编译代码,改完代码需要打包完成后运行dist文件夹下的index.html才能看到效果,现在改为自动化,一旦发现变化就自动打包。

        ①下载:npm i webpack-dev-server -D

        ②使用:在webpack.config.js中和plugins同级添加

 plugins: [],

 devServer: {
    host: 'localhost', //启动服务器域名
    port: '3000',      //启动服务器端口号
    open:  true,       //是否自动打开浏览器
 },

        ③打包 npx webpack 后,serve 指令运行服务器(服务器一直开启,代码改动自动编译,浏览器自动刷新)。如想停止服务器运行,点击键盘ctrl+c即可。

13.打包css文件:

打包css相关方法icon-default.png?t=N7T8https://webpack.docschina.org/plugins/mini-css-extract-plugin#root

css兼容性相关处理icon-default.png?t=N7T8https://webpack.docschina.org/loaders/postcss-loader/

14.生产模式与开发模式:

生产模式(也就是上线模式)是开发完成代码后,我们需要得到打包后的代码将来部署上线。这个模式下我们主要对代码进行压缩和优化,让其运行性能更好。

优化主要从两个角度出发:

        ①优化代码运行性能。

        ②优化代码打包速度。

针对生产环境和开发环境我们需要两套配置文件将之前的webpack.config.js拆分为两个文件。

首先在webpack-code文件夹下创建一个文件夹叫config,config文件夹下创建两个文件:

        ①webpack.dev.js      //开发环境配置

        ②webpack.prod.js    //生产环境配置

然后通过package.json配置简化运行指令。

webpack.dev.js文件:

开发环境启用devserver开发服务器,会自动编译内容到内存环境,所以这里output的配置可以取消。因为配置文件都放到了config文件夹内,所有,全部的绝对路径都要回退一级。相对路径不需要,因为相对路径是相对我们命令运行的路径(命令运行的路径始终是根目录)。


const path = require("path");
// path是node.js的核心模块,用来处理文件路径
 
module.exports = {
    entry: "./src/main.js",
    output: {
       // path: path.resolve(__dirname, "../dist"),  //dist改为../dist
       //filename: "main.js",
       // clean:true,
    },
    module: {
        rules: [],
    },
    plugins: [],

    // 开发服务器
    devServer: {
        host: "localhost", // 启动服务器域名
        port: "3000", // 启动服务器端口号
        open: true, // 是否自动打开浏览器
    },

    mode: "development", 
};

webpack.prod.js文件:

生产环境要配置文件编译输出目录,和文件清空上一次的配置(clean:true)。绝对路径也要回退上一级目录。相对路径相对命令运行目录不需要改变。开发服务器配置(devServer)可以去掉。

const path = require("path");
// path是node.js的核心模块,用来处理文件路径
 
module.exports = {
    entry: "./src/main.js",
    output: {
        path: path.resolve(__dirname, "../dist"),  //dist改为../dist
        filename: "main.js",
        clean:true,
    },
    module: {
        rules: [],
    },
    plugins: [],

    // 开发服务器
    //devServer: {
        //host: "localhost", // 启动服务器域名
        //port: "3000", // 启动服务器端口号
        //open: true, // 是否自动打开浏览器
    //},

    mode: "production", 
};

package.json文件:

在“scripts“里面配置

// package.json
{
  // 其他省略
  "scripts": {
    "start": "npm run dev", //运行dev指令
    "dev": "npx webpack serve --config ./config/webpack.dev.js", //运行开发环境配置并启动服务器
    "build": "npx webpack --config ./config/webpack.prod.js"  //运行生产环境编译打包指令
  }
}

启动项目指令:

        ①开发模式:npm start 或 npm run dev

        ②生产模式:npm run build

15.Webpack中文文档:

Webpack中文文档icon-default.png?t=N7T8https://webpack.docschina.org/concepts/

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

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

相关文章

【光伏干货】光伏无人机巡检步骤

随着光伏产业的迅速发展和无人机技术的日益成熟&#xff0c;光伏无人机巡检已成为提高光伏电站运维效率、降低运维成本的重要手段。本文将详细介绍光伏无人机巡检的步骤&#xff0c;帮助读者更好地理解和应用这一技术。 一、前期准备 1、设备检查&#xff1a;对无人机及其相关…

Kong api网关实战教程

1. kong介绍 Kong是一款基于OpenResty(NginxLua模块)编写的高可用、易扩展的&#xff0c;由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgresQL构建的&#xff0c;能据供易于使用的RSTTAP[来操作和配置API管理系统&#xff0c;所以它可以水平扩…

HDU 2196 Computer(树形dp)

H D U 2196 C o m p u t e r &#xff08;树形 d p &#xff09; \Huge{HDU 2196 Computer&#xff08;树形dp&#xff09;} HDU2196Computer&#xff08;树形dp&#xff09; 文章目录 题意思路标程 题目链接&#xff1a;Problem - 2196 (hdu.edu.cn) 题意 给出一个n个节点的无…

go webview/wails学习记录

文章目录 webview安装基础代码错误情况wails安装初始化一个项目错误信息使用arco-design(在初始化项目上修改代码)修改窗口图标多页面展示添加自定义图标-iconfont制作伸缩侧边栏侧边栏菜单在form中使用select且select联动选择使用go读取本地excel文件在转json_str使用go将json…

怎么把电脑上的文件传到手机上?可保存文档的云笔记

在职场中&#xff0c;我们经常需要将电脑上的重要文件、资料传到手机上&#xff0c;以便随时查阅和使用。比如&#xff0c;当你在公司完成了一份关键报告&#xff0c;但即将外出与客户沟通&#xff0c;这时如果能将报告传到手机上&#xff0c;就能在移动中随时准备应对客户的咨…

5.22-wjn

使用select实现的TCP并发服务器端 #define SER_PORT 8888 #define SER_IP "192.168.125.158" int main(int argc, const char *argv[]) {//1、为通信创建一个端点int sfd socket(AF_INET, SOCK_STREAM, 0);//参数1&#xff1a;说明使用的是ipv4通信域//参数2&#…

Oracle的安装以及一些相关问题

系列文章目录 Oracle的安装以及一些相关问题 文章目录 系列文章目录前言一、Oracle的安装二、常用命令三、误删dbf四、PLSQL乱码五、oracle更换数据库字符集总结 前言 一段时间没更新&#xff0c;主要最近一直在找工作&#xff0c;最终还是顺着春招找到工作了&#xff0c;现在…

【基础篇-Day8:JAVA字符串的学习】

目录 1、常用API2、String类2.1 String类的特点2.2 String类的常见构造方法2.3 String类的常见面试题&#xff1a;2.3.1 面试题一&#xff1a;2.3.2 面试题二&#xff1a;2.3.3 面试题三&#xff1a;2.3.4 面试题四&#xff1a; 2.4 String类字符串用于比较的方法2.5 String类字…

文生图模型演进:AE、VAE、VQ-VAE、VQ-GAN、DALL-E 等 8 模型

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

【idea】IDEA 设置自动导入类 / 包等信息(import)

如果大家正在使用一个未曾导入&#xff08;import&#xff09;过的类&#xff0c;或者它的静态方法或者静态字段&#xff0c;IDEA 会给出对应的建议。需要手动操作导入类。 以下设置可以自动导入

磁珠笔记汇总

磁珠笔记汇总 磁珠是和电感很相似的器件。 电感磁珠单位亨(H)欧姆(Ω)是否储能存储能量消耗高频能量应用场景通常用于开关电源吸收高频&#xff0c;EMC保护如何看待损耗使用电感时希望损耗越小越好使用磁珠时是利用其损耗来消耗不需要的高频分量 一、磁珠的工作原理 磁珠与…

第十三届蓝桥杯国赛大学B组填空题(c++)

A.2022 动态规划 AC; #include<iostream> #define int long long using namespace std; int dp[2050][15]; //dp[i][j]:把数字i分解为j个不同的数的方法数 signed main(){dp[0][0]1;for(int i1;i<2022;i){for(int j1;j<10;j){//一种是已经分成j个数,这时只需每一个…

unbantu安装ollama,maxkb

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 背景一、Ollama安装1.安装2.安装后检验3.运行模型4.常用命令 二、安装maxkb1.说明2.docker安装maxkb2.添加模型3.创建应用4.api域名无效 三、总结 背景 最近在学习…

zabbix监控mysql

一、mysql数据库监控的内容有 mysql的吞吐量 mysql的常规操作&#xff08;增删改查&#xff09; QPS&#xff08;Questions Per second:&#xff09;每秒能处理多少次请求数 TPS&#xff08;Transactions Per Second&#xff09;每秒查询处理的事务数 mysql库大小和表大小 监控…

2024年新算法-红嘴蓝鹊优化器(RBMO)优化BP神经网络回归预测

2024年新算法-红嘴蓝鹊优化器(RBMO)优化BP神经网络回归预测 亮点&#xff1a; 输出多个评价指标&#xff1a;R2&#xff0c;RMSE&#xff0c;MSE&#xff0c;MAPE和MAE 满足需求&#xff0c;分开运行和对比的都有对应的主函数&#xff1a;main_BP, main_RBMO, main_BPvsBP_R…

Mysql 单行转多行,把逗号分隔的字段拆分成多行

一、拆分前后的数据 二、执行SQL select substring_index(substring_index(a.gzlx,,,b.help_topic_id1),,,-1) gzlxname, a.gzlx,a.* from dt_task_zxgz_info a join mysql.help_topic b on b.help_topic_id < (length(a.gzlx) - length(replace(a.gzlx,,,))1) 三、解释说…

爷爷看了都会,打工人必备的摸鱼AI神器!免费!

去年&#xff0c;AI技术无疑成为了最为引人注目的焦点&#xff0c;层出不穷的创新应用令人目不暇接。尽管许多人对这股AI热潮的持久性持怀疑态度&#xff0c;但现实却用事实给予了最有力的反驳。AI所展现出的强大生产力&#xff0c;足以令人刮目相看。 而今年以来&#xff0c;…

【实用的 IDEA 配置和操作技巧总结】

前置知识 IDEA的设置快捷键为ctrlalts键&#xff0c;后文介绍IDEA常见的配置就不再赘述这一点了。 基础配置 取消默认打开上次项目 日常开发都会打开不同的项目&#xff0c;初次安装IDEA之后&#xff0c;每次打开IDEA都会开启上一次启动的项目&#xff0c;所以我们需要进入设…

Android studio sdk 虚拟机无法打开运行

1.确认是否在BIOS开启硬件虚拟化支持,选择Enable 2.win8/win10 Hyper-V冲突。控制面板-》程序与功能-》windows功能-》关闭 Hyper-V 3.sdk 路径非默认路径 复制avd C:\Users\Administrator\.android\avd 到 sdk的安装路径下 D:\Android\sdk 。重启软件重新启动即可

Spring:事务

1. 简介 spring对jdbc进行封装&#xff0c;简化对数据库的操作 2. HelloWorld 1. 搭建模块 2.加入依赖 <dependencies><!--spring jdbc Spring 持久化层支持jar包--><dependency><groupId>org.springframework</groupId><artifactId>s…