webpack学习

1.webpack
项目-----》装载器------》插件------》浏览器
loader:将浏览器不能识别的文件转化为html,js,css
插件:对文件进行处理像压缩,合并等
入口:
出口:


创建webpack
webpack init -y

webpack零配置打包
npx webpack
只打包js文件生成main.js

webpack指定配置
默认入口:  src/index.js
默认出口:  dist/main.js

插件
html-webpack-plugin:
  plugins:[
    new htmlWebpackPlugin({
      template:'./src/index.html',//指定输出得文件模板
      filename:'main.html'//指定输出的文件名
    })
  ]

  webpack-dev-server:
  配置:
   "scripts": {
    "dev":"webpack serve",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

在webpack.config.js中配置

  使用命令 npm run dev

  webpack默认只支持js,不支持css
  需要css-loader  
  style-loader: 将css直接添加到html的script标签中
  装载器的执行顺序从右到左   
  module:{
    rules:[
      {
        test:/\.css/,
        use:['style-loader','css-loader']

      }
    ]
  }

  加载多个css文件在index.css中可以导入别的样式文件也能打包
  @import './color.css';
  body{
    background: red;
  }


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

  }

@import './color.css';
@import './index.less';
body{
  background: red;
}

抽取css作为一个文件 css文件抽取器
插件: mini-css-extract-plugin

使用:
const cssMiniExtractPlugin = require('mini-css-extract-plugin')
 plugins:[
    new htmlWebpackPlugin({
      template:'./src/index.html',//指定输出得文件模板
      filename:'index.html'//指定输出的文件名,最好使用index.html,这样运行的时候可以直接找到index.html

    }),
    new cssMiniExtractPlugin({
      filename:'index.css'
    })
  ],
 module:{
    rules:[
      {
        test:/\.css/,
        // use:['style-loader','css-loader'] 使用cssMiniExtractPlugin插件将css抽出
        use:[cssMiniExtractPlugin.loader,'css-loader']

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

      }
    ]
  }

  mode改为production,打包的时候会把js压缩,css没有被压缩
  css压缩插件  optimize-css-assets-webpack-plugin CssMinimizerWebpackPlugin
  css-minimizer-webpack-plugin插件更新使用方法相同
使用:const OptCssAssetsWebpackPlugin =require('optimize-css-assets-webpack-plugin')
 optimization:{
    minimizer:[new OptCssAssetsWebpackPlugin()]
  },
  
  配置了css压缩后js压缩会失效,需要指定js压缩插件
terser-webpack-plugin
配置:  
optimization:{
    minimizer:[new OptCssAssetsWebpackPlugin(),new terserWebpackPlugin()]
  },


webpack5支持部分es6,不支持es7
babel是一个javascript编译器
使用装载器   babel-loader
安装插件:npm install -D babel-loader @babel/core @babel/preset-env @babel/plugin-proposal-decorators --legacy-peer-deps
配置:{
        test:/\.js$/,
        use:{
          loader:'babel-loader',
          options:{
            presets:[
              "@babel/preset-env"
            ],
          }
        }

      }


js模块化:

  commonjs  :
  a.js
  let c = 'a'   
  module.exports = {
    c
  }
  加载:
  let c = require('./a.js');


  es6导出
  a.js
  const a = 444
  export default a
  加载
  import a from './a.js'

tree shaking 树摇   在生产模式中启用
将没有使用的代码在打包中去掉(去掉不用的代码)
webpack4的这个功能很弱,只支持当前js中午用的代码删除
webpack5加强了这个功能

打包生成dist目录没有分类存储
打包生成动态名字和hash
 filename:'css/[name].[hash].css'
  filename:'css/[name].[hash:4].css' 4位hash值
 第一次打包文件会被浏览器自动缓存,当第二次修改打包发布文件不变,文件不会下载新的文件
hash:内容hash,内容有改变hash值就会改变

全局变量  jquery
全局变量使用import导入就需要每个地方都需要导入
配置全局变量
const webpack = require('webpack')
webpack.providePlugin 能够给所有组件注入全局变量
new webpack.ProvidePlugin({
  $:'jquery'
})

这样问题是会把jquery三方包一起打包,会造成打包的文件很大
将别的包使用cdn链接引入项目
  externals:{
    jquery:'$'
  }

图片加载  file-loader
file-loader默认使用的是es6的模块化
{
  test:/\.(jpg|png|webp)$/,
  use:[{
    loader:'file-loader',
    options: {
      esModule:false,//默认使用es6的模块化,false是commonjs模块化
      name: '[name].[ext]',
      outputPath: 'images/'
  }
  }],
},
1.使用js导入
2.css导入
 {
        test:/\.css$/,
        // use:['style-loader','css-loader'] 使用cssMiniExtractPlugin插件将css抽出
        use:[{
          loader: cssMiniExtractPlugin.loader,
          options: {
            publicPath:'../'
          }
        },'css-loader']

      },
3.html使用图片
插件  html-withimg-loader
配置:  {
        test:/\.html$/,
        use:['html-withimg-loader']
      },
url-loader使用方法和file-loader相同,只是url-loader可以设置limit属性在图片小于这个限制可以转化为base64

样式兼容性
chrome:webkit
等到所有厂商都支持后可以去掉前缀
安装插件: yarn add  -D autoprefixer postcss-loader  --legacy-peer-deps

使用创建配置文件:postcss.config.js
module.exports = {
  plugins:[
    require('autoprefixer')
  ]
}
在package.json中添加
  "browserslist":[
    "> 1%",
    "last 100 version",
    "not ie<=8"
  ]

配置postcss-loader
  {
    test:/\.css$/,
    // use:['style-loader','css-loader'] 使用cssMiniExtractPlugin插件将css抽出
    use:[{
      loader: cssMiniExtractPlugin.loader,
      options: {
        publicPath:'../'
      }
    },'css-loader',,'postcss-loader']

  },

单页面应用:页面都是动态生成,标签数据 单个html
多页面应用:  大型应用   静态化   多个html、

webpack多环境打包
各个环境服务器ip不同
.env 配置文件
模板模式:首先要有一个模板,这个模板会实现大部分功能,只留下部分未实现,子文件继承模板,自己扩展 最终得到一个子和父的合体
根究不同的环境配置

webpack.base.js  模板
webpack.dev.js  开发环境
webpack.prod.js 生产环境

多种跨域支持:

1.cors:后端处理
2.代理 nginx
3.webpack处理跨域
webpack代理 只能在开发中使用
devServer:{//w=配置webpack-dev-server
    port:"8080",//配置端口
    open:true,//自动打开浏览器
    // progress:true,//显示进度
    // contentBase:'./dist'//指定web服务器的根目录默认是dist
    proxy:{
      '/api':{
        target:'http://...',
        // pathRewrite:{
        //   '/api':''//去掉前缀/api
        // }
      }
    }
  },

4.将后端服务与前端服务整合到一块
const webpack = require('webpack');
const middle = require("webpack-dev-middleware");
const config = require('./webpack.config");
const compile = webpack(config);
app.use(middle(compile))

5.jsonp

热更新(热加载)
devServer:{//w=配置webpack-dev-server
    port:"8080",//配置端口
    open:true,//自动打开浏览器
    hot:true,//开启热更新
    // progress:true,//显示进度
    // contentBase:'./dist'//指定web服务器的根目录默认是dist
    proxy:{
      '/api':{
        target:'http://...',
        // pathRewrite:{
        //   '/api':''//去掉前缀/api
        // }
      }
    }
  },
单页面应用配置

const path = require('path');
let htmlWebpackPlugin = require('html-webpack-plugin');
const cssMiniExtractPlugin = require('mini-css-extract-plugin');
// const OptCssAssetsWebpackPlugin =require('optimize-css-assets-webpack-plugin')
const OptCssAssetsWebpackPlugin =require('css-minimizer-webpack-plugin')
const terserWebpackPlugin = require('terser-webpack-plugin')
const webpack = require('webpack')
// node写法,webpack基于node
module.exports = {mode:'production',//production、development// 入口entry:'./src/index.js',output:{path:path.resolve(__dirname,"dist"),filename:'js/[name].[hash].js'},devServer:{//w=配置webpack-dev-serverport:"8080",//配置端口open:true,//自动打开浏览器// progress:true,//显示进度// contentBase:'./dist'//指定web服务器的根目录默认是dist},optimization:{minimizer:[new OptCssAssetsWebpackPlugin(),new terserWebpackPlugin()]},plugins:[new htmlWebpackPlugin({template:'./src/index.html',//指定输出得文件模板filename:'index.html'//指定输出的文件名,最好使用index.html,这样运行的时候可以直接找到index.html}),new cssMiniExtractPlugin({filename:'css/[name].[hash].css'}),new webpack.ProvidePlugin({$:'jquery'})],module:{rules:[{test:/\.css$/,// use:['style-loader','css-loader'] 使用cssMiniExtractPlugin插件将css抽出use:[{loader: cssMiniExtractPlugin.loader,options: {publicPath:'../'}},'css-loader',,'postcss-loader']},{test:/\.less$/,use:[cssMiniExtractPlugin.loader,'css-loader','less-loader','postcss-loader']},// {//   test:/\.(jpg|png|webp)$/,//   use:[{//     loader:'file-loader',//     options: {//       esModule:false,//默认使用es6的模块化,false是commonjs模块化//       name: '[name].[ext]',//       outputPath: 'images/'//   }//   }],// },{test:/\.(jpg|png|webp)$/,use:[{loader:'url-loader',options: {esModule:false,//默认使用es6的模块化,false是commonjs模块化name: '[name].[ext]',outputPath: 'images/',limit:100*1024}}],},{test:/\.html$/,use:['html-withimg-loader']},{test:/\.js$/,use:{loader:'babel-loader',options:{presets:["@babel/preset-env"],}}}]},
//排除不需要的第三方包externals:{jquery:'$'}}

多页面应用:

// 多页面应用打包需要指定多个入口多个出口
const path = require('path');
let htmlWebpackPlugin = require('html-webpack-plugin');
const cssMiniExtractPlugin = require('mini-css-extract-plugin');
// const OptCssAssetsWebpackPlugin =require('optimize-css-assets-webpack-plugin')
const OptCssAssetsWebpackPlugin =require('css-minimizer-webpack-plugin')
const terserWebpackPlugin = require('terser-webpack-plugin')
const webpack = require('webpack')
// node写法,webpack基于node
module.exports = {mode:'production',//production、development// 入口多页面应用entry:{index:'./src/index.js',other:'./src/other.js'},output:{path:path.resolve(__dirname,"dist"),filename:'js/[name].[hash].js'//多个入口就输出多个文件},devServer:{//w=配置webpack-dev-serverport:"8080",//配置端口open:true,//自动打开浏览器hot:true,//开启热更新// progress:true,//显示进度// contentBase:'./dist'//指定web服务器的根目录默认是distproxy:{'/api':{target:'http://...',// pathRewrite:{//   '/api':''//去掉前缀/api// }}}},optimization:{minimizer:[new OptCssAssetsWebpackPlugin(),new terserWebpackPlugin()]},plugins:[// 输出主页 引入的js也不一样new htmlWebpackPlugin({template:'./src/index.html',//指定输出得文件模板filename:'index.html',//指定输出的文件名,最好使用index.html,这样运行的时候可以直接找到index.htmlchunks:['index']}),// 输出别的页面new htmlWebpackPlugin({template:'./src/index.html',//指定输出得文件模板filename:'other.html',//指定输出的文件名,最好使用index.html,这样运行的时候可以直接找到index.htmlchunks:['index','other']}),new cssMiniExtractPlugin({filename:'css/[name].[hash].css'}),new webpack.ProvidePlugin({$:'jquery'})],module:{rules:[{test:/\.css$/,// use:['style-loader','css-loader'] 使用cssMiniExtractPlugin插件将css抽出use:[{loader: cssMiniExtractPlugin.loader,options: {publicPath:'../'}},'css-loader',,'postcss-loader']},{test:/\.less$/,use:[cssMiniExtractPlugin.loader,'css-loader','less-loader','postcss-loader']},// {//   test:/\.(jpg|png|webp)$/,//   use:[{//     loader:'file-loader',//     options: {//       esModule:false,//默认使用es6的模块化,false是commonjs模块化//       name: '[name].[ext]',//       outputPath: 'images/'//   }//   }],// },{test:/\.(jpg|png|webp)$/,use:[{loader:'url-loader',options: {esModule:false,//默认使用es6的模块化,false是commonjs模块化name: '[name].[ext]',outputPath: 'images/',limit:100*1024}}],},{test:/\.html$/,use:['html-withimg-loader']},{test:/\.js$/,use:{loader:'babel-loader',options:{presets:["@babel/preset-env"],}}}]},
//排除不需要的第三方包externals:{jquery:'$'}}

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

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

相关文章

Spring、SpringBoot、SpringCloud、SpringCloud Alibaba、Elasticsearch版本对应,附下载地址

1、GitHub Alibaba 发布SpringCloud Alibaba和SpringCloud 、SpringBoot版本 Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot2022.0.0.0-RC2Spring Cloud 2022.0.03.02022.0.0.0-RC1Spring Cloud 2022.0.03.0.02021.0.5.0*Spring Cloud 2021.0.52.6.132021.0.4…

js代码优化

感觉有点基础&#xff0c;不过还是记一下&#xff0c;遇到了至少有话说 语言特性 避免全局查找&#xff1a;在JavaScript中&#xff0c;全局变量的查找会比局部变量更耗时。因此&#xff0c;尽量将常用的变量存储为局部变量&#xff0c;以减少作用域链的查找时间。 避免过度使…

蓝桥杯上岸每日N题第三期(一)!!!

大家好 我是寸铁&#x1f4aa; 考前需要刷大量真题,大家一起相互监督&#xff0c;每日做N题&#xff0c;一起上岸吧✌️ ~ 冲刺蓝桥杯省一模板大全来啦 &#x1f4a5; ~ 蓝桥杯4月8号就要开始了 &#x1f64f; ~ 还没背熟模板的伙伴们背起来 &#x1f4aa; &#x1f4aa; &…

0基础学C#笔记03:进制转换

文章目录 前言一、十进制转二进制、八进制、十六进制1、类方法:使用Convert类方法ToString2、自己写:二、二进制、八进制、十六进制转十进制1、使用Convert类方法ToInt322、自己写经验总结扩展延伸1.十六进制转浮点数2、浮点数转十六进制数前言 首先我们知道在计算机当中所有…

uni-app 用法总结

1、跳转页面 this.$tab.navigateTo(/pages/mine/info/index) 2、接收跳转页面的参数 this.$tab.navigateTo(/pages/mine/info/index?abcccc) 获取页面传递的参数 this.$route.query.abc 3、动态设置导航标题 uni.setNavigationBarTitle({ // 接收到的title标题 …

基于FPGA的softmax函数优化及实现

文章目录 前言优化方案测试数据产生及Matlab结果处理流程工程说明功耗与面积标准softmax函数功耗与面积总结前言 FPGA异构计算是一个趋势,在AI推理、深度学习中广泛使用FPGA进行加速,减小系统延迟。而AI推理中有一个组件被广泛使用,各种网络模型中都有其身影,那就是激活函…

Ceph 应用

Ceph 应用 一、创建 CephFS 文件系统 MDS 接口 1.服务端操作 1&#xff09;在管理节点创建 mds 服务 cd /etc/ceph ceph-deploy mds create node01 node02 node032&#xff09;查看各个节点的 mds 服务 ssh rootnode01 systemctl status ceph-mdsnode01 ssh rootnode02 syst…

人工智能顶会投稿截止时间汇总

一、NeurIPS 1. 会议名称及等级 Annual Conference on Neural Information Processing Systems&#xff08;CCF-A&#xff09;https://dblp.uni-trier.de/db/conf/nips/index.html 2. 投稿时间及接收率 https://neurips.cc/Conferences/2023/CallForPapers#OpenReview 一般…

【C++修炼之路】内存管理

&#x1f451;作者主页&#xff1a;安 度 因 &#x1f3e0;学习社区&#xff1a;StackFrame &#x1f4d6;专栏链接&#xff1a;C修炼之路 文章目录 一、C/C 内存分布二、考题三、C语言动态内存管理方式四、C内存管理方式1、对内置类型2、对自定义类型 五、C对动态管理的升级六…

【Scheme】Scheme 编程学习 (二) —— 基础

【Scheme】Scheme 编程学习 (二) —— 基础 文接前一节内容 : 【Scheme】Scheme 编程学习(一) —— 概述 本文章可以跟视频课程一起看&#xff0c;做了一些补充说明 原视频地址&#xff1a; Bilibili https://www.bilibili.com/video/BV1Kt411R7Wf/?p2&spm_id_frompage…

Html基础知识学习——圣杯布局、margin负值、等高布局(十七)

文章目录 圣杯布局margin负值等高布局 圣杯布局 两边页面固定中间页面宽度随着浏览器大小自适应 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

mmdetection3.1.0 训练自己的数据集

目录 前言安装mmcv安装mmdetection验证安装数据集转为COCO划分训练集、验证集及测试集安装PaddlePaddle安装PaddleX划分数据集 修改对应文件修改coco.py重新安装修改模型文件 训练测试测试带真值的图像测试不带真值的图像批量测试 错误集锦ValueError: need at least one array…

Kafka

1.定义 Kafka&#xff1a;一个分布式基于发布/订阅模式的消息队列。 发布者发布消息进入队列后&#xff0c;每个订阅者都能在一定时间内获取发布的消息&#xff08;Kafka&#xff1a;消费者通过主动拉取pull队列&#xff09;。 缺点&#xff1a;即使没有消息&#xff0c;消费者…

如何解决VScode远程下载插件不了的问题?如何手动安装插件?

当我们在使用VScode进行远程操作时&#xff0c;在安装我们所需要的一些插件时&#xff0c;可能会出现如下图&#xff0c;一直卡在安装中....明明只有小几十MB&#xff0c;却一连好几个小时都一动不动。像这种情况&#xff0c;就需要我们进行手动安装该插件。 插件网站&#xff…

在云计算环境中,保护Java应用程序可用的有效措施和工具

云计算&#xff08;Cloud&#xff09;技术是近年来计算机科学的一个重要突破。大多数组织已经通过将自己的应用程序移入云平台而获益。不过&#xff0c;如何保证应用程序在第三方服务器上的安全性&#xff0c;是一项艰巨的挑战。 在本文中&#xff0c;我们将重点讨论Java&…

Kubernetes 之 Helm

什么是 Helm 每个成功的软件平台都有一个优秀的打包系统&#xff0c;比如Debian、Ubuntu 的 apt&#xff0c;RedHat、CentOS 的 yum。Helm 则是 Kubernetes上 的包管理器&#xff0c;方便我们更好的管理应用。 在没使用 helm 之前&#xff0c;向 kubernetes 部署应用&#xff…

一文带你了解Spring中存入Bean和获取Bean的方式

0. Spring中的五大注解 上图中就是五大类注解对应的层&#xff0c;通过源码可以看到其他四个注解都基于Conponent 1. 存入 Bean Spring既然是一个包含众多工具方法的IoC容器&#xff0c;它是一个控制反转的容器&#xff0c;所以就需要将Bean对象存入到容器中&#xff0c;需要…

使用Jenkins自由风格的软件项目实现接口自动化测试持续集成

这里写目录标题 一、JOB项目配置1、添加描述2、限制项目的运行节点3、源码管理4、构建触发器5、构建步骤6、构建后操作 一、JOB项目配置 1、添加描述 可选选项可填可不填 2、限制项目的运行节点 节点中要有运行环境所需的配置 节点配置教程&#xff1a;https://blog.csdn…

回归预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于SVM-Adaboost支持向…

Spring初识(一)

一.Spring 是什么&#xff1f; 首先我们来看看官网的解释 Spring 使每个人都可以更快、更轻松、更安全地进行 Java 编程。Spring 对速度、简单性和生产力的关注使其成为 世界上最受欢迎的 Java框架。 这里我简单的说明一下什么是spring? 我们通常所说的 Spring 指的是 Sprin…