webpack前端应用之基础打包

news2024/11/20 4:41:41

目录

前言:初识 Webpack 5

一、前端工程化

1、webpack

​ (2)主要功能:

2、webpack的使用:配置文件所需要的信息(五大配置属性)

3、示例

        强调:

4、webpack中使用的loader

二、webpack配置详解


前言:初识 Webpack 5

        webpack 是一个静态资源的打包工具,会以一个或多个文件为入口,将这一个或多个文件直接或间接使用到的所有文件,组合成一个或多个文件输出。输出的文件就是编译好的文件,通常称其为 bundle,可以在浏览器上运行。Webpack 本身能力有限,在不添加 loader、plugin等扩展时能力有限。

        Webpack 能让前端具有 模块化 和 工程化。

一、前端工程化

1、webpack

(1)定义:是一个前端的构建工具。前端代码格式多(html、css、js、图片),前端构建工具的作用是将各种格式不同文件打包到一起,方便项目的上线运行。(将开发环境的代码转换成运行环境的代码)

开发环境的代码:便于阅读

运行环境的代码:能够更快的执行(通常会对代码进行压缩)

​ (2)主要功能:

​ A、代码压缩:将js代码、css代码、静态的资源文件(图标、图像)等进行混合压缩,使代码的体积变小、加载速度更快

B、统一编译语法:css、less、sass,ES6语法、TypeScript语法等,语法要求不同在不同浏览器上运行时会出现问题,就需 要使用构建工具进行统一编译

C、模块化处理:css、js都有自己的模块化处理方式,对于这些模块化的语法在不同浏览器上的兼容性很差,需要使用构建工具统一模块化的形式,提高兼容性

2、webpack的使用:配置文件所需要的信息(五大配置属性)

(1)entry(入口配置):配置打包的入口文件(即从项目的哪个文件开始打包)

(2)output(输出配置):配置打包后的文件,名称是什么、存储路径是什么

         path:指明存储路径

         filename:指定打包后的文件名

         clean:指定打包前是否清空打包的输出目录

(3)Loaders(加载器):webpack只能处理js、json等文件,若需要打包处理其他格式的文件(css、less、sass、vue、图片)时需要使用不同的loader(插件)辅助完成。若安装了不同的loader,需要在webpack的配置中通过module.rules进行配置

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

(5)mode(打包的模式): webpack 有两种打包模式:生产模式 production 和 开发模式 development。两种模式都只能编译ES6中的模块(Module)语法。

3、示例

(1)创建文件夹(根目录): webpack-study

(2)进入该文件夹,打开cmd窗口(vs code终端)

​(3)将该文件夹初始化为npm项目:npm init

(4)安装 webpack 开发依赖:npm install webpack webpack-cli -D

        或 npm install  webpack  -D

            npm install  webpack-cli  -D

        强调:

​         A、使用npm安装包时,若没有指定版本号,默认安装最新版本

         B、package.json文件中dependencies键的含义是发布后还依赖的,devDependencies键的

                含义是开发时的依赖

​         C、npm install —save:将依赖包安装到dependencies键下;npm install —save-dev将依赖

                包安装到devDependencies键下

         D、i 是 install 的缩写,-D 是 —save-dev 的缩写(即在开发时的依赖)

​ (5)项目的目录结构:

 (6)写代码

​ (7)在项目的根目录下创建webpack的配置文件:webpack.config.js

/**
 * webpack的基本打包配置有: entry、output、mode 三项即可
 */
const path = require('path');
module.exports = {
    entry:'./src/main.js',//配置打包入口文件
    output:{//输出配置
        path: path.join(__dirname,'dist'),//配置输出文件的保存位置
        filename:'js/bundle.js',//打包后的文件名
        clean: true,//打包前是否将打包的输出目录清空
    },
    mode:'development'//以开发模式打包
}

(8)在package.json文件中配置打包指令

  1. "scripts": {
  2. "build": "webpack"
  3. }

​ (9)运行打包指令进行打包

​ (10)将打包后的js文件导入页面文件(index.html)中

4、webpack中使用的loader

​ (1)url-loader用来打包图像文件

(2)’style-loader’, ‘css-loader’, ‘less-loader’:用来打包样式文件

(3)babel-loader:打包js文件

(4)vue-loader:打包.vue文件

 此处附加 webpack官网

二、webpack配置详解

const { resolve } = require('path'); // node 内置核心模块,用来处理路径问题。
module.exports = { 
     mode: 'development' //开发环境   production  //生产环境
 	 entry: './src/js/index.js', //  单入口文件
      // entry: {                     //多入口  会打包双方重复文件
      //   index: './src/index.js',
      //   another: './src/another-module.js'
      // },
      // entry: {                     //多入口   lodash不会重复打包
      //   index: { import: './src/index.js', dependOn: 'shared' },
      //   another: { import: './src/another-module.js', dependOn: 'shared' },
      //   shared: 'lodash' //不会重复打包
      // },
	 output: { // 输出配置
    	 //filename: './built.js', // 输出文件名 
         path: resolve(__dirname, 'dist'),  //打包后的输出位置 webpack当前目录下的  dist
    //contenthash根据内容变化生成文件名 不变不修改名字会用缓存
        filename: 'scripts/[name].[contenthash].js', //'bundle.js',      //打包后的文件名  多个入口不能写固定一个名字
        clean: true,   //打包后清除上次内容
        assetModuleFilename: 'images/[contenthash][ext]', //静态文件打包地址/文件名
        publicPath: ''
	 },
    // devtool: 'inline-source-map',  //打包后找到真实源代码位置
     devServer: {            //实时更新
        static: './dist', 
        hot: true,   //开启热更新
        compress: true, // 启动gzip压缩
        port: 3000, // 端口号
        open: true // 自动打开浏览器
        proxy: {   //代理
          '/api': {
            target: 'http://localhost:4000',
            changeOrigin: true,
            ws: true,
            pathRewrite: {
              '^/api': ''
            }
      }
    }
  },
 module: {
    rules: [
      // 详细loader配置
      // 不同文件必须配置不同loader处理
     {
        test: /\.(jpg|gif|png)/,
        use: 'url-loader',
        option: {// 图片大小小于8kb,就会被base64处理// 优点: 减少请求数量(减轻服务器压力)// 缺点:图片体积会更大(文件请求速度更慢)
          esModule: true,
          limint: 5 * 1024,    //图片是否转base64
          name: '[hash: 10].[ext]'  //图片命名
        }
      },
      {
        test: /\.(css|less)$/,
        // use: ['style-loader', 'css-loader', 'less-loader']  //从后往前编译 先解析在编译  行内样式
        use: ['MinCssExtractPlugin.loader', 'css-loader', 'less-loader'], //把css文件打包到一个css 用link引入到html中
      },
      {
        test: /\.js$/,
        exclude: /node_modules/, // 不打包指定路径下的js文件
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env'],
            plugins: [
              [
                '@babel/plugin-transform-runtime'  //为promise解决
              ]
            ]
          }
        }
      },
 
    ]
  },
 plugins: [
webpack.HotModuleReplacementPlugin(), //热更新
    new HtmlWebpackPlugin({
      template: './index.html', //要打包的html
      filename: 'app.html',  //html打包后的名字
      inject: 'body',   //script 标签生成地址
      collapseWhitespace: true,  //压缩移除空格
      removeComments: true,  //压缩移除注释
    }),
    new MinCssExtractPlugin({   //把css文件打包到一个新css 用link引入到html中 可修改地址/文件名
      filename: 'styles/[contenthash].css'
    })
  ],
 optimization: {
    minimizer: [
      new CssMinimizerWebpackPlugin()  //还需将mode改为production  会压缩css代码
    ],
    splitChunks: {
      // chunks: 'all',// 公共文件 lodash不会重复打包
      cacheGroups: {
        vendor: {
          test: /[\\/]node_modules[\\/]/,
          name: 'vendors',
          chuns: 'all'
        }
      }
    }
  }
};

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

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

相关文章

【Java基础】003 -- Java基础概念(计算机的存储规则)

目录 计算机的存储规则 1、什么是二进制? 2、为什么计算机要使用二进制存储数据? 3、进制之间可以转换吗? 4、码表(Text文本) 5、图片数据 6、声音数据 计算机的存储规则 在计算机中,任意的数据都是…

java集成RSA非对称加密数据传输

使用场景: 前端请求后端接口时如:登录接口,这时候需要传账号密码到后端接口请求这样就会暴露请求的数据。RSA非对称加密分公钥和私钥,公钥将数据进行加密,私钥对加密的数据进行解密 (当然前端最好是封装一下不要暴露出来公钥) 代码实现: 1、RSA工具类(或访问http:…

大数据舆情监控应用平台,TOOM大数据舆情监控系统的作用

大数据舆情监控应用是利用大数据技术对社会舆情的收集、分析、挖掘和展示的工具。它通常会收集和分析各种社交媒体、新闻媒体、博客等信息,以了解舆情动态和趋势。大数据舆情监控应用可以帮助企业和政府了解市场和社会动态,为决策提供支持。然而&#xf…

聚观早报 |比亚迪预计去年营收超4200亿元;美股三大指数集体收跌

今日要闻:比亚迪预计去年营收超 4200 亿元;美股三大指数集体收跌;王凤英正式加入小鹏汽车出任总裁;苹果计划在印度生产 25% 的 iPhone 手机;LVMH老板放狠话坚决打击代购行为比亚迪预计去年营收超 4200 亿元 1 月 30 日…

(Java高级教程)第四章必备前端基础知识-第三节3:JavaScript之DOM和BOM

文章目录一:WebAPI概述二:DOM(1)获取元素(2)事件(3)操作元素A:获取(修改)元素内容B:获取(修改)元素属性C&…

LeetCode 刷题系列 -- 108. 将有序数组转换为二叉搜索树

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums [-10,-3,0,5,9]输出&a…

粒子群优化(PSO)算法例题实现

目录 一、实验要求 二、算法流程 三、案例实现及结果 完整程序: 一、实验要求 二、算法流程 粒子群算法流程: 1、初始化:初始化粒子群;给每个粒子赋予初始位置和速度 2、计算适应值:根据适应度函数,计…

新范式+新标准=世界级产品|StarRocks年度总结

岁序常易,华章日新。虎年即将落幕,雄关漫道,我们携手社区斗志昂扬,并肩虎跃雄关。兔年新岁将至,黎明破晓,我们协力社区蓄势待发,昂首共赴新程。值此送虎迎兔的新春佳节之际,感恩与St…

电子技术——MOS放大器的DC偏置

电子技术——MOS放大器的DC偏置 正如前几节我们学习的,MOS放大器的小信号模型的参数取决于正确的DC偏置,这个步骤称为偏置设计。一个好的偏置设计要满足一个稳定的漏极DC电流 IDI_DID​ 和设置正确的 VDSV_{DS}VDS​ 保证MOS管在放大信号的时候处在饱和区…

Qt StyleSheet介绍

文章目录前言纠错技巧可以使用 , 号来同时指明多个同一类型控件的样式表qss注释前言 本文主要以这篇博客为基础。添加一些自己使用的心得和使用样式表的一些技巧 纠错 ID选择器这里类型选择器可以省略,因为每个控件的objectName是不一样的,所以无需指定…

高性能消息队列中间件MQ

毕业后工作半年,在自己的讲课中需要介绍消息队列,以前在大学也有经常接触message queen,但却还不够深入了解掌握,这次写个专门针对mq的文章理清头绪。 以下是学习mq的知识框架,我会不定时更新补充 RabbitMQ概念_MQ 消…

TwinCAT3串口通讯EL6021模块使用-和串口调试助手自由协议通讯

目录 一、简介 二、环境介绍 三、接线连接 四、创建TwinCAT3程序工程 1、IO扫描和参数设置 2、创建PLC程序 (1)库文件添加 (2)创建任务和程序 (3)变量关联 (4)重新激活工程、运…

adb的一些基本操作

adb的一些基本操作 Android使用的系统一般是debian系列操作系统,所以使用adb shell连接到手机后,可以使用大部分Debian系列的命令进行相关的操作 列出所有应用:adb shell pm list packages 列出第三方(系统)应用:adb shell pm li…

1611_PC汇编语言_math例程分析

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 这一次分析后带有注释的代码我会在笔记最后做一个完整的附加。 这一个例程,主要是为了阐述前面讲到的数学运算。但是从这些操作中,很多底层…

介绍golang限流库以及漏桶与令牌桶的实现原理

RateLimit 限流中间件 前言 为什么需要限流中间件? 在大数据量高并发访问时,经常会出现服务或接口面对大量的请求而导致数据库崩溃的情况,甚至引发连锁反映导致整个系统崩溃。或者有人恶意攻击网站,大量的无用请求出现会导致缓…

Spark JDBC采用分区读取数据库时partitionColumn, lowerBound, upperBound, numPartitions参数理解

partitionColumn是应该用于确定分区的列。 lowerBound并upperBound确定要获取的值的范围。完整数据集将使用与以下查询对应的行: SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound numPartitions确定要创建的分区数。lowerBound和之间…

Unicode 和 UTF-8 详解

结论 Unicode 是 字符集 UTF-8 是 编码规则 字符集:为每一个字符分配唯一的ID(如 SCII 码) 编码规则:将 码位转换为字节序列的规则 背景 老规矩,我们用图文并茂的方式来讲解: ASCII 这个字符集 由于仅能…

[Android Studio] Android Studio设置杂项

🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 📋笔记目…

【HBase高级】3. HBase批量装载——Bulk load(1)Bulk load简介与案例介绍

2. HBase批量装载——Bulk load 2.1 简介 很多时候,我们需要将外部的数据导入到HBase集群中,例如:将一些历史的数据导入到HBase做备份。我们之前已经学习了HBase的Java API,通过put方式可以将数据写入到HBase中,我们…

MyBatis(三)使用MyBatis完成CRUD(增删改查)

准备工作 1、创建module(Maven的普通Java模块):mybatis-002-crud 2、pom.xml 打包方式jar依赖:mybatis依赖mysql驱动依赖junit依赖logback依赖3、mybatis-config.xml放在类的根路径下 4、CarMapper.xml放在类的根路径下 5、lo…