02---webpack基础用法

01 entry打包的入口文件:
单入口entry是一个字符串:适用于单页面项目

module.exports = {

    entry:'./src/index.js'

}


多入口entry是一个对象

module.exports = {

    entry:{

        index:'./src/index.js',

        app:'./src/app.js'

    }

}
02 output打包的出口文件:
单入口配置

module.exports = {

    entry:'./src/index.js'

    output:{

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


    filename:'bundle.js'
}

}

多入口的配置 需要通过站位符【name】来进行站位,相当于是在dist输出两个出口的文件

module.exports = {

    entry:{

        app:'./src/app.js',

        index:'./src/index.js'
    }

    output:{

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


    filename:'[name].js'
}

}
03 loaders:webpack只支持js和json文件类型,loaders需要把其他文件进行转化为有效的模块
const path = require('path')

module.exports = {

 module:{

    rules:[  test指定对应的规则  use加载对应的loader

        {test:/\.txt$/,use:'raw-loader'}

    ]

 }

}

04 plugin插件的配置:
const path = require('path')

module.exports = {

    plugins:[  放到plugins的数组中

        new HtmlWebpackPlugin(

            {template:'./src/index.html'}
        
        )
    ]

}

05 modu:用来指定当前的构建环境:production development node
mode模式默认为production

设置 process.env.NODE_ENV的值为 development.开启NamedChunksPlugin和NamedModulesPlugin

设置 process.env.NODE_ENV的值为 production.开启FlagDependencyUsagePlugin 

,FlagIncludedchunksPluginModuleConcatenationPlugin 

,NoEmitOnErrorsPlugin0ccurrenceOrderPlugin,sideEffectsFlagPlugin和TerserPlugin。

none:不开启任何优化选项
 06 解析ES6以及React JSX语法:
解析ES6---需要安装npm install @babel/core  @babel/preset-env  babel-loader -D
 
webpack.config.js配置 

modele.exports = {

    module:{

        rules:[

            {test:/\.js$/,use:'babel-loader'}
        
        ]

    }

}

bebel的配置文件是.babelrc 

{

    "presets":["@babel/preset-env"],

    "plugins":["@babel/proposal-class-properties"]
}



解析react jsx的语法: 需要再安装 npm i @babel/preset-react:

在 .babelrc文件中增加@babel/preset-react

{

    "presets":["@babel/preset-env","@babel/preset-react"],

    "plugins":["@babel/proposal-class-properties"]
}

07 react使用的案例 : 需要安装react react-dom插件, src创建search.js文件
search.js文件代码如下

import React from 'react'

import ReactDom from 'reacr-dom'

class Search extends React.Component {

   render(){

        return {


            <div>我是react</div>
        }

}

}

RactDom.render(<Search/>,document.getElementById('root'))

 再执行 npm run build的命令 在dist目录下会创建出一个search.js文件,index.html页面中引入文件

<html>

    <body>

        <div id='root'></div>

        <script src='./dist/search.js'></script>
    
    </body>

</html>
08 解析css与less,需要使用style-loader css-loader less-loader
module.exports = {

 module:{

    rules:[


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

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

}
09 解析图片与字体资源
module.exports = {

 module:{

    rules:[


        {test:/\.(png | svg | jpg | gif)$/,use:['file-loader']},

            
        {test:/\.(woff | woff2 | eot | ttf | otf)$/,use:['file-loader']}

        
         // 这里是解析base64        

        {test:/\.(png | svg | jpg | gif)$/,use:[{loader:'url-loader',options:  
       
        {limit:10240}}]},
        
    ]}
        
    ]
  }

}
10 webpack中的文件监听:源码发生变化 自动构建输出新的文件;
1 第一种 在package.json文件中: 缺点 还需要自己手动刷新浏览器

“build”:“webpack --watch”

2 第二种  在webpack.config.js中设置  

  module.exports = {

    watch:true, 

    watchOptions:{
 
         ignored:/node_modules, 

         aggregateTimeout:300,  监听到变化发生后300ms后再去执行
        
         poll:1000  判断文件是否发生变化 默认美妙访问1000次
   
    }

  }
11 webpack热更新。代码更新后会自动刷新浏览器不用手动刷新,需要借助webpack-dev-server
在package.json文件中进行配置:

"scripts":{

 "dev":"webpack-dev-server --open"

}

在webpack.config.js文件中配置

const webpack = require('webpack')

plugins:[

    new webpack.HotModuleReplacementPlugin()
],

devServer:{
 
 contentBase:'./dist',

 hot:true

}
12 文件指纹:打包输出的文件名会有一个后缀:<src="index_0123223db.js?bid=123">
hash:和整个项目的构建有关,只要项目文件有修改,整个项目构建的hash值会更改

chunkhash:和webpack打包的chunk有关 不同的entry会生成不同的chunkhash值

contenthash:根据文件内容来定义hash 文件内容不同contenthash不变

使用的方法 

js使用chunckhash  css使用contenthash  图片使用hash

modulle.exports = {

output:{

    filename:`[name]_[chunckhash:8].js`,

    path:__dirname+'/dist'
 
  },

plugins:[

    new MiniCssExtractPlugin({

        filename:`[name]_[contenthash:8].css`
    })
],

module:{

    rules:[

        {test:/\.(png | svg | gif)$/, use:[{loader:'file-loader', options:{name:`img/[name]_[hash:8].[ext]`}}]}
    ]

}

}

这里需要注意的是如果是要在dist目录下输出单独的css文件 需要将use:['style-loader'换成MiniCssExtractPlugin.loader]
13 代码压缩[html,css,js]
webpack内置了uglifyjs-webpack-plugin插件,打包后的代码会自动压缩js代码。


html的压缩:修改html-webpack-plugin 设置压缩的参数

module.exports = {

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

    output:{

    path:__dirname+'/dist',

    filename:'[name]_[chunkhash:8].js'

    },

    plugins:[

        new HtmlWebpackPlugin({

            template:path.join(__dirname,'src/search.html'),

            filename:'search.html',

            chunks:['search'],

            inject:true,

            minify:{

                html5:true,

                collapseWhitespace:true,

                preserveLineBreaks:false,

                minifyCSS:true,

                minifyJS:true,

                removeComments:false

            }

        })

    ]

}



css的压缩需要使用optimize-css-assets-webpack-plugin和cssnano

module.exports = {

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

    output:{

    path:__dirname+'/dist',

    filename:'[name]_[chunkhash:8].js'

    },

    plugins:[

        new OptimizeCssAssetsPlugin({

            assetNameRegExp:/\.css$g/,

            cssProcessor:require('cssnano')

        })

    ]

}
14 自动清理构建目录产物 :每次构建的时候还需要手动的删除dist目录下的文件
借助与webpack的clean-webpack-plugin的插件每次构建可以自动删除dist目录的文件

module.exports = {

 plugins:[

        new CleanWebpackPlugin()
    
    ]

}

        

        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【opencv】教程代码 —video(3) 视频背景剔除

bg_sub.cpp 这段代码的功能是把视频中的背景和前景分离&#xff0c;提取出前景的运动物体。根据用户选择的不同的模式&#xff0c;可以选择基于MOG2或者基于KNN的方法来进行背景减除。在处理每一帧图像的过程中&#xff0c;首先使用背景减除模型对图像帧进行处理&#xff0c;得…

RabbitMQ3.7.8集群分区(脑裂现象)模拟及恢复处置全场景测试

测试环境准备: MQ服务器集群地址&#xff0c;版本号为3.7.8&#xff1a; 管理控制台地址:http://173.101.4.6:15672/#/queues 集群状态 rabbitmqctl cluster_status 集群操作相关命令: 创建一个RabbitMQ集群涉及到如下步骤&#xff1a; 安装RabbitMQ&#xff1a; 在每台要在集…

JVM专题——类文件加载

本文部分内容节选自Java Guide和《深入理解Java虚拟机》, Java Guide地址: https://javaguide.cn/java/jvm/class-loading-process.html &#x1f680; 基础&#xff08;上&#xff09; → &#x1f680; 基础&#xff08;中&#xff09; → &#x1f680;基础&#xff08;下&a…

利用AI结合无极低码(免费版)快速实现接口开发教程,会sql即可,不需要编写编译代码

无极低码无代码写服务+AI实践 本次演示最简单的单表无代码增删改查发布服务功能,更复杂的多表操作,安全验证,多接口调用,自自动生成接口服务,生成二开代码,生成调用接口测试,一键生成管理界面多条件检索、修改、删除、查看、通用公共接口调用、通用无限级字典调用等后续…

【Linux】Ubuntu 文件权限管理

Linux 系统对文件的权限有着严格的控制&#xff0c;用于如果相对某个文件执行某种操作&#xff0c;必须具有对应的权限方可执行成功&#xff0c;这也是Linux有别于Windows的机制&#xff0c;也是基于这个权限机制&#xff0c;Linux可以有效防止病毒自我运行。因为运行的条件是必…

第二十三章 Git

一、Git Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布式版…

前端三剑客 —— CSS ( 坐标问题 、定位问题和图片居中 )

前期内容回顾&#xff1a; 1.常见样式 text-shadow x轴 y轴 阴影的模糊程度 阴影的颜色 box-shadow border-radio 实现圆角 margin 内边距 padding 外边距 background 2.特殊样式 媒体查询&#xff1a;media 自定义字体&#xff1a;font-face { font-family:自定义名称&#…

代码随想录算法训练营第四十四天 |卡码网52. 携带研究材料 、518. 零钱兑换 II、377. 组合总和 Ⅳ

代码随想录算法训练营第四十四天 |卡码网52. 携带研究材料 、518. 零钱兑换 II、377. 组合总和 Ⅳ 卡码网52. 携带研究材料题目解法 518. 零钱兑换 II题目解法 377. 组合总和 Ⅳ题目解法 感悟 卡码网52. 携带研究材料 题目 解法 题解链接 1. #include <iostream> #inc…

生成式人工智能与 LangChain(预览)(上)

原文&#xff1a;Generative AI with LangChain 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 一、生成模型是什么&#xff1f; 人工智能&#xff08;AI&#xff09;取得了重大进展&#xff0c;影响着企业、社会和个人。在过去的十年左右&#xff0c;深度学习已经发…

【接口】HTTP(1)|请求|响应

1、概念 Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;用于从万维网&#xff08;就是www&#xff09;服务器传输超文本到本地浏览器的传送协议。 HTTP协议是基于TCP的应用层协议&#xff0c;它不关心数据传输的细节&#xff0c;主要是用来规定客户端和…

单元测试 mockito(二)

1.返回指定值 2.void返回值指定插桩 3.插桩的两种方式 when(obj.someMethod()).thenXxx():其中obj可以是mock对象 doXxx().wien(obj).someMethod():其中obj可以是mock/spy对象 spy对象在没有插桩时是调用真实方法的,写在when中会导致先执行一次原方法,达不到mock的目的&#x…

RobotFramework测试框架(2)-测试用例

创建测试数据 测试数据语法 这里的测试数据就是指的测试用例。 测试文件组织 测试用例的组织层次结构如下&#xff1a; 在测试用例文件&#xff08; test case file &#xff09;中建立测试用例 一个测试文件自动的建成一个包含了这些测试用例的测试集&#xff08; test s…

vulhub中Apache Solr 远程命令执行漏洞复现(CVE-2019-0193)

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发&#xff0c;主要基于 HTTP 和 Apache Lucene 实现。此次漏洞出现在Apache Solr的DataImportHandler&#xff0c;该模块是一个可选但常用的模块&#xff0c;用于从数据库和其他源中提取数据。它具有一个功能&#…

【Android Studio】上位机-安卓系统手机-蓝牙调试助手

【Android Studio】上位机-安卓系统手机-蓝牙调试助手 文章目录 前言AS官网一、手机配置二、移植工程三、配置总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 AS官网 AS官网 一、手机配置 Android Studio 下真机调试 二、移植工程 Anro…

【Linux】第二个小程序--简易shell

请看上面的shell&#xff0c;其本质就是一个字符串&#xff0c;我们知道bash本质上就是一个进程&#xff0c;只不过命令行就是一个输出的字符串&#xff0c; 我们输入的命令“ls -a -l”实际上是我们在输入行输入的字符串&#xff0c;所以&#xff0c;如果我们想要做一个简易的…

通用开发技能系列:SQL基础学习

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 通用开发技能系列 文章&#xff0c;主要对编程通用技能 SQL基础 进行学习 1.数据库简介 1.1.数据库中的一些名称 DataBase&#xff1a;数据库 程序员只负责怎么维护存取数据&#xff0c;不管数据库是什么 DBA…

c#程序报错引用无效解决办法之一:检查引用的文件路径

直接右键然后打开本地 打开这个.csproj文件&#xff0c;直接对着路径看看里面的路径对不对。 一般是很多人一起开发&#xff0c;然后这个文件路径被推送上来的问题

考研经验与科目学习建议

前言 24考研刚刚结束&#xff0c;成功上岸&#xff0c;回想起刚开始的时候的迷茫&#xff0c;加上因为迷茫而被卖书的坑的几百块钱。感慨万千&#xff0c;所以决定写下这篇文章。回想当时&#xff0c;因为笔者零基础&#xff0c;加上作为一名专升本的学生&#xff0c;惶恐因为…

第十四届省赛大学B组(C/C++)子串简写

原题链接&#xff1a;子串简写 程序猿圈子里正在流行一种很新的简写方法&#xff1a; 对于一个字符串&#xff0c;只保留首尾字符&#xff0c;将首尾字符之间的所有字符用这部分的长度代替。 例如 internationalization 简写成 i18n&#xff0c;Kubernetes 简写成 K8s&#…

目标检测——车牌数据集

一、重要性及意义 交通安全与管理&#xff1a;车牌检测和识别技术有助于交通管理部门快速、准确地获取车辆信息&#xff0c;从而更有效地进行交通监控和执法。例如&#xff0c;在违规停车、超速行驶等交通违法行为中&#xff0c;该技术可以帮助交警迅速锁定违规车辆&#xff0…