webpack的简单使用

webpack的简单使用

项目初始化

  1. npm init

  2. npm install --save-dev webpack

    npm install --save-dev webpack-cli

    –save表示非全局下载;–global表示全局下载

    (不同项目可能需要不同的依赖版本,故用–save更好)
    -dev表示开发环境中使用,部署后不需要用到
    –save 部署后也要用

    也可以一次下载多个

    npm install --save-dev webpack webpack-cli

  3. 在根目录下新建文件webpack.config.js

    const path = require('path');//nodejs的一个全局变量,获取当前目录的绝对路径var config = {entry: './src/index.js',output: {filename: 'bundle.js', //打包之后的文件path: path.resolve(__dirname, 'dist') //使用'_dirname'是为了避免解决在不同服务器上绝对路径不同的问题}
    };module.exports = config;
    

    使用npx webpack命令构建项目

  4. webpack相关配置

    1. 在每次构建前清理之前的输出
      在output中添加clean: true

    2. 设置不压缩和禁止生成license.txt(即不单独生成注释文件)

      1. 下载插件terser-webpack-plugin
      2. module.exports对象中中添加如下代码
      optimization: {minimize: false,//不压缩jsminimizer: [new TerserPlugin({extractComments: false,//不将注释提取到单独的文件夹})]
      }

webpack对JS的处理

  1. 多页应用

    • 设置多入口
    • 设置多出口文件
     entry: {index: './src/page/index/index.js',
    },output: {filename: './js/[name].bundle.js', //打包之后的文件(用[name]处理多入口问题)----index.bundle.jspath: path.resolve(__dirname, 'dist'), //使用'_dirname'是为了避免在不同服务器上绝对路径不同的问题clean: true,
    },
    
  2. jQuery的引用

    • 模块化方法

      1. 下载依赖npm install jquery --save
      2. 代码引入var $ = require('jquery');
      3. 用法不变$('body').html('hello jquery');

      问题:每一个需要使用jquery的地方都需要require,比较麻烦,会把jquery的js也打包进出口文件中

    • 传统方式

      1. 卸载依赖npm uninstall jquery --save

      2. CDN

        百度CDN<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>

        注意引用的先后顺序

    • 外部变量

      作为外部变量引入——传统直接引用+模块化的方式(webpack的配置文件中写,不需要install)

      externals: {'jquery': 'window.jQuery',//有些页面已经引入了jQuery,直接通过window对象获取,注意要大写
      }
      

      注意在代码中区分一下 var $$ = require('jquery');

      var $$ = require('jquery');
      $$('body').html('hello jquery。。。。。');
      console.log('this is index js');
      
  3. 公共模块的提取(util,会被很多个js调用的模块,如jdbc)

    • 公共模块提取成独立的文件

      在优化optimization里写

      splitChunks: {name: 'util',//给公共模块文件命名为utilchunks: 'all',minSize: 0},
      

webpack对HTML、CSS、图片的处理**

  1. CSS的处理

    下载加载器 css loader (style-loader)

    npm install --save-dev css-loader

    使用MiniCssExtractPlugin 将 CSS 从 bundle 中分离出来单独打包

    不要同时使用 style-loader 与 mini-css-extract-plugin

    下载插件

    引入
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');

    在exports对象中添加

     module: {rules: [{test: /\.css$/i,use: [{loader: MiniCssExtractPlugin.loader,options: {publicPath: '../'}}, 'css-loader'],},],
    },
    

    plugins中添加

        new MiniCssExtractPlugin({filename: 'css/[name].css'}),
    
  2. 图片的加载

    • url-loader和file-loader limit参数和name参数控制图片格式和名称

      module的rules中添加

        {test: /\.(png|svg|jpg|gif)$/, use: ['url-loader?limit=1000&name=images/[name].[ext]']}
    
  3. HTML的处理

    • HtmlWebpack

webpackDevServer的使用

  1. 安装依赖npm install --save-dev webpack-dev-server

  2. 配置

    • 引入依赖
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    • exports对象中添加
    devServer: {port: 8888,static: './dist',
    },
    
    • plugins中添加
        new HtmlWebpackPlugin({template: './src/view/index.html',filename: 'view/index.html',inject: true, //网页用到什么,自动识别注入hash: true, //版本号chunks: ['index'],//index入口的所有东西会被这个网页用到minify: {collapseWhitespace: false //不压缩}})
    
    • 用于单页面应用,每个页面都要这样写,太麻烦了,提取为方法
    var getHtmlConfig = function (name) {return {template: './src/view/' + name + '.html',filename: 'view/' + name + '.html',inject: true, //网页用到什么,自动识别注入hash: true, //添加版本号,如<link href="../css/index.css?2ae023c62db635021a67" rel="stylesheet">chunks: ['common', name],//指出的入口的所有东西会被这个网页用到,将通用模块放到这就不用在每个js中require一次了minify: {collapseWhitespace: false //不压缩}}
    }
    
    • plugins中写调用方法
    new HtmlWebpackPlugin(getHtmlConfig('index')),
    new HtmlWebpackPlugin(getHtmlConfig('login')),
    new webpack.HotModuleReplacementPlugin()//启用热部署
    

    单个 HTML 页面有多个入口时添加optimization.runtimeChunk: 'single'配置

  3. 热部署成功后,保存即显示修改

    • package.json中的scripts中添加

      "start": "webpack-dev-server --open" //open表示自动打开浏览器,否则需要手动打开

    • 编译后使用npm run start命令即可打开浏览器

      注意:发布时别忘了重新编译,保存到dist里面去

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

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

相关文章

推荐收藏的五款上网行为管理软件

在选择上网行为监控软件的时候需要考虑这几个因素&#xff1a;市场占有率、价格、是否试用、服务商实力等&#xff0c;以下介绍的这几个软件就是从这几个方面出发&#xff0c;为大家总结的优秀软件。 安企神&#xff1a; 国内企业级信息安全解决方案提供商&#xff0c;其上网行…

MAC用户福利:一站式电商客服工具下载地址大全揭秘!

列举和比较拼多多商家版,阿里卖家MAC版本&#xff0c;京麦工作台&#xff0c;聊天宝MAC版&#xff0c;千牛MAC版&#xff0c;抖店MAC版各种适用于MAC系统的电商客服工具&#xff0c;提供平台MAC版本的下载地址&#xff0c;帮助用户提高客服效率、改善客户体验&#xff0c;从而提…

大数据第六天

这里写目录标题 问题解决问题查询插入(时间慢)练习sql数据清理 问题 FAILED: ParseException line 1:16 mismatched input ‘input’ expecting INPATH near ‘local’ in load statement MismatchedTokenException(24!155) 加载数据的时候出现了这个错误&#xff0c;我们解释…

【spring】springProperty 使用

springProperty 是一个在 Spring 框架中使用的SpEL&#xff08;Spring Expression Language&#xff09;表达式&#xff0c;它允许你在应用程序的配置中引用 Spring 应用程序上下文中的属性值。这个表达式通常用于从 Spring 的 Environment 对象中获取配置属性的值&#xff0c;…

(36)4.20 数据结构(线性表)初始化,输入,删除,查找

#include<stdio.h> #include<stdlib.h> #include<errno.h> #define InitSize 10 #define Max_Size 10 //1.顺序表上基本操作的实现//顺序表的初始化 typedef struct { int* data; //指示动态分配数组指针 int MaxSize;//顺序表的最大容量 int …

Linux基础 - libc.so调试版本编译

技术文档记录 问题&#xff1a;使用自编译的libc.so库进行动态链接报错 步骤&#xff1a; 获取源码&#xff1a;下载libc源码 https://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz调试模式&#xff1a;使用 export CFLAGS" -g3 -Og" 来编译 libc.so测试编译&#xf…

STM32 HAL库 利用CH376进行USB文件读写

STM32 其实可以进行读取USB文件,但仅限于F4以上芯片才可以进行SUB文件读写,但在项目开发中,往往用不到此芯片,那么只能通过外挂的USB芯片进行USB文件读写,本文则是采用STM32F103的SPI与CH376进行通信,通过CH376操作指令进行操作。 1、CH376介绍 CH376芯片 是沁恒的一款文…

Web前端-前端工程化

黑马程序员JavaWeb开发教程 文章目录 一、前后端分离开发1、介绍&#xff08;1&#xff09;前后端混合开发&#xff08;2&#xff09;、前后端分离开发 2、YAPI&#xff08;1&#xff09;介绍 二、前端工程化-环境准备1、Vue-cli&#xff08;1&#xff09;NodeJS安装教程 三、前…

【软件工程中的增量模型】

文章目录 前言什么是增量模型&#xff1f;增量模型的优点1. 风险控制2. 增量交付3. 可变性4. 提高可维护性 增量模型的缺点1. 需求变更的管理2. 集成测试的复杂性3. 可能的性能问题 前言 增量模型是一种迭代式的软件开发模型&#xff0c;注重将系统划分为多个子系统或模块&…

客服话术分享:客服如何挖掘需求?

电商客服主动挖掘询问顾客需求是非常重要的&#xff0c;这就需要我们具备一定的沟通技巧。今天这篇客服话术分享&#xff0c;很适合想提升业绩的你们哦&#xff01; 一、打招呼式询问需求&#xff1a; 1.欢迎光临&#xff0c;本店竭诚为您服务~请问您有什么具体想了解的问题吗&…

【PHP】PHP7中的引用计数

目录 一、环境二、前言三、字符串类型四、数组类型问题1:不变数组的作用是什么?问题2:为什么非空的不变数组的refcount初始值是2?五、引用类型六、参阅一、环境 PHP 7.4 二、前言 PHP的变量在底层有一个引用计数(refcount)属性,这个引用计数是为垃圾回收(GC)服务的…

力扣数据库题库学习(4.24日)

1068. 产品销售分析 I 问题链接 思路分析 编写解决方案&#xff0c;以获取 Sales 表中所有 sale_id 对应的 product_name 以及该产品的所有 year 和 price 。返回结果表 无顺序要求 。 这个问题很简单&#xff0c;查询两张表内的指定字段。这个考的其实就是数据库的连接&am…

半字节16进制转asci

void uartTxHexByte(uint8_t Data) {uartTxByte(nibbleToHex(Data >> 4));uartTxByte(nibbleToHex(Data & 0x0F)); }uint8_t nibbleToHex(uint8_t nibble) {uint8_t ret nibble;if(nibble < 10){ret 0;}else{ret A - 10;}return(ret); }

架构师系列-MYSQL调优(六)- 排序优化

MySQL中的两种排序方式 索引排序: 通过有序索引顺序扫描直接返回有序数据额外排序: 对返回的数据进行文件排序ORDER BY优化的核心原则: 尽量减少额外的排序&#xff0c;通过索引直接返回有序数据。 索引排序 因为索引的结构是B树&#xff0c;索引中的数据是按照一定顺序进行…

janus架构学习

基础介绍 Janus 是由Meetecho设计和开发的开源、通用的基于SFU架构的WebRTC流媒体服务器&#xff0c;它支持在Linux的服务器或MacOS上的机器进行编译和安装。Janus 是使用C语言进行编写的&#xff0c;它的性能十分优秀。 架构 janus为sfu架构 模块结构图 模块说明 core模…

VR全景创业项目应该如何开展?未来有市场吗?

伴随着5G网络的发展&#xff0c;VR全景得到了众多的关注和提升。与此同时&#xff0c;各行各业都开始关注自身产业在互联网的展示效果&#xff0c;因为年轻一代的生活已经离不开互联网&#xff0c;而VR全景在互联网上的3D展示效果能给商家带来流量&#xff0c;提升营业额。 随着…

【Qt】.ui文件转.h文件

1、打开qt命令行 2、转换 uic -o ui.h mainwindow.ui

前端补充17(JS)

一、JS组成成分 JS的组成成分&#xff0c;由三部分组成 第一、ECMAScript&#xff1a;语法规则&#xff0c;如何定义变量&#xff0c;数据类型有哪些&#xff0c;如何转换数据类型&#xff0c;if判断 if-else while for for-in forEach do-while switch 数组 函数 对…

欧美助听器市场热门品牌盘点,国产爱可声备受青睐

近年来&#xff0c;随着中国技术的不断进步和品质的提升&#xff0c;国产助听器品牌爱可声在欧美市场备受瞩目。在欧美国家助听器市场&#xff0c;有许多热门品牌分别为&#xff1a;峰力、斯达克、瑞声达、爱可声等。这些品牌凭借其悠久的历史、先进的技术和高品质的产品&#…