1.webpack是前端资源构建工具(将一系列小工具用一个大工具处理),静态模块打包器(js资源,css资源,图片字体等资源)。  
首先告诉webpack一个入口文件,webpack就会以这个入口文件为起点开始打包,根据模块(资源文件)的依赖关系进行静态分析,形成依赖关系树状图,然后形成chunk.js(代码块),然后chunk再进行各种处理,比如将less转换成css,将ES6转换成ES5,这些操作统一概括起来叫做打包,打包后将处理好的资源输出去叫bundles(静态资源)。

功能
- 将浏览器不可解析的less,sass css预处理器"编译"成浏览器可识别的css
- 将ES6高级的js编译成浏览器可识别的js

五个概念
1. entry:入口文件,指示webpack用哪个文件作为入口,分析内部关系依赖图。
2. output:指示webpack打包后的资源bundles输出到哪里去,以及如何命名。
3. loader:让webpack处理那些非javascript文件(webpack自身只能理解js)
4. plugins: 执行范围更广的任务,插件的范围包括打包优化,压缩,重新定义环境中的变量。
5. mode: 指示webpack使用相应模式的配置,设置process.env.NODE_ENV。
- 开发模式(development),能让代码本地调试运行的环境
- 生产模式(production),能让代码优化上线运行的环境

练习1,压缩js

初始化项目,在项目终端输入npm init 生成package.json文件

npm init

下载webpack,项目终端运行以下命令

npm i webpack webpack-cli -g
npm i webpack webpack-cli -D
在项目目录新建src文件夹,build文件夹,然后再src文件夹新建一个index.js文件,在index.js中随意输入一些js代码,然后执行如下命令,这个命令的意思是

webpack 以index.js 入口文件打包,打包后输出到build,整体打包环境是开发环境,如果打包环境是生成环境,把mode=developement 改为 mode=production
webpack ./src/index.js -o ./build/built.js  --mode=development

打包成功后会在我们刚指定的bulid文件夹下面看到打包后的代码,同时在命令行看到打包前的文件比打包后的文件大,说明webpack有压缩j代码。减小文件体积的功能。

练习2, 加载css

webpack 只能识别js 和 json文件,如果要识别css 文件,就要写配置,新建webpack.confing.js. 如下

// 所有构建工具是基于nodejs平台运行的,模块默认使用commmon.js
const {resolve} = require('path')
module.exports={//入口文件,指示webpack以哪个文件开始打包entry:"./src/index.js",output:{//输出的文件名filename:"built.js",//输出路径//__dirname :nodejs 变量,代表当前文件目录的绝对路径path:resolve(__dirname,"build")},//loader的配资module:{//不同文件必须配置不同loader处理rules:[{//匹配哪些文件,正则匹配css文件test:/\.css$/,//使用哪些loaderuse:[//uses数组执行顺序,从下到上依次执行//创建style标签,将js中的样式资源插入进行,添加到head中生效'style-loader',//将css文件变成commmon.js模块加载到js中,里面内容是样式字符串'css-loader']},{test:"/\.less$/",user:["style-loader","css-loader",//将less文件编译成css文件"less-loader"]}]//详细loader配置},//plugins的配置plugins:[],//模式mode:"development",// mode:"production"
}

测试代码

import "./index.css";
function add(x,y){return x+y
}
console.log(add(1,2))

下载css-loader 和style-loader, 这两个都是开发依赖

npm i css-loader style-loader -D

然后在命令行输入"webpack"开始打包,打包成功后如图,可以看到css文件也被打包进去了。

如果要测试刚刚写的js 和 css 代码有没有生效,可在打包后的文件夹build下建一个index.html,然后引入打包过后的文件,再运行,可以看到写的css样式生效

练习3, 压缩html

使用插件压缩html,在src文件夹下新建index.html,任意输入HTML内容,webpack.config.js内容如下

// 所有构建工具是基于nodejs平台运行的,模块默认使用commmon.js
const {resolve} = require('path');
const HtmlWebpack =  require('html-webpack-plugin')
module.exports={//入口文件,指示webpack以哪个文件开始打包entry:"./src/index.js",output:{//输出的文件名filename:"built.js",//输出路径//__dirname :nodejs 变量,代表当前文件目录的绝对路径path:resolve(__dirname,"build")},//loader的配资module:{//不同文件必须配置不同loader处理rules:[{//匹配哪些文件,正则匹配css文件test:/\.css$/,//使用哪些loaderuse:[//uses数组执行顺序,从下到上依次执行//创建style标签,将js中的样式资源插入进行,添加到head中生效'style-loader',//将css文件变成commmon.js模块加载到js中,里面内容是样式字符串'css-loader']}]},//plugins的配置plugins:[new HtmlWebpack()],//模式mode:"development",// mode:"production"
}

需要用html-webpack-plugin压缩HTML, 先下载html-webpack-plugin,然后执行webpack命令,就会在build文件夹下面自动生成一个index.html,

修改plugin后重新打包,这样打包完会将src下面的index.html复制出来

//plugins的配置plugins:[//功能:默认会创建一个空的html文件,引入打包输出的所有资源//需求:需要一个有结构的html.new HtmlWebpack({//复制如下文件,并将它原本的功能并引入打包输出的所有资源template:"./src/index.html"})],

练习4 压缩图片

(1)在src下面建一个index.css ,index.js  ,index.css写一个背景图样式,在index.js中映入index.css做测试

webpack.config.js   loader配置代码如下

//loader的配置module: {//不同文件必须配置不同loader处理rules: [{//匹配哪些文件,正则匹配css文件test: /\.css$/,//使用哪些loaderuse: [//uses数组执行顺序,从下到上依次执行//创建style标签,将js中的样式资源插入进行,添加到head中生效'style-loader',//将css文件变成commmon.js模块加载到js中,里面内容是样式字符串'css-loader']},{//处理图资源test: /\.(png|jpg|gif)$/,//需要下载url-loader 和file-loader ,url-loader 依赖 file-loaderloader: 'url-loader',options:{//图片小于8kb,图片会转为base64//优点:减少请求数量,减轻服务器压力//缺点:转换后的图片体积会更大一些limit:8*1024,}}]},

下载url-loader 和 file-loader后执行webpack,打包完成后会在build文件夹下看到一个带有哈希值的图片,index.css中的arrow.png图片没有生成哈希值的图片,因为刚在webpack配置文件设置小于8k的图片是转为了base64。

(2)src 文件夹下面建一个html文件,html文件中插入img标签并写好图片路径,这个时候用刚那个url-loader是处理不了的,打包后看不到这个图片,需做如下配置

   //loader的配资module: {//不同文件必须配置不同loader处理rules: [{//匹配哪些文件,正则匹配css文件test: /\.css$/,//使用哪些loaderuse: [//uses数组执行顺序,从下到上依次执行//创建style标签,将js中的样式资源插入进行,添加到head中生效'style-loader',//将css文件变成commmon.js模块加载到js中,里面内容是样式字符串'css-loader']},{//默认处理不了html中的图片//处理图资源test: /\.(png|jpg|gif)$/,//需要下载url-loader 和file-loader ,url-loader 依赖 file-loader//url-loader:处理样式中的图片路径loader: 'url-loader',options:{//图片小于8kb,图片会转为base64//优点:减少请求数量,减轻服务器压力//缺点:转换后的图片体积会更大一些limit:8*1024,},//给图片进行重命名//[hash:10] 取图片的hash的前10位//[ext]取文件原来的扩展名name:'[hash:10].[ext]'},{test:/\html$/,//处理html文件中的图片文件(负责引入img,从而能被url-loader进行处理)loader:"html-loader"}]},

下载html-loader后再执行webpack.即可

5.打包其他资源(字体,图标)

webpack.config,js配置

 //loader的配资module: {rules: [{test: /\.css$/,use: ['style-loader','css-loader']},//打包其他资源(除了html/css/js)的资源{exclude: /\.(html|css|js)$/,loader: "file-loader",options: {name: '[hash:10].[ext]'}},
]
}

webpack(一)压缩js,加载css,压缩html,压缩图片相关推荐

  1. Yii --EClientScript 扩展,css,js文件代码压缩合并加载

    扩展插件下载地址,解压后复制到/protected/vendor/ https://github.com/muayyad-alsadi/yii-EClientScript main配置文件配置插件,c ...

  2. js控制css 加载,CSS样式表的加载对于DOM解析,渲染,JS执行的阻塞问题

    CSS加载问题 css加载会不会阻塞DOM树的解析? css加载会不会阻塞DOM树的渲染? css加载会不会阻塞后面js语句的执行? css阻塞 h1 { color: red !important ...

  3. webpack加载css样式 ----css相关loader

    一.什么是loader? webpack 只能理解 JavaScript 和 JSON 文件,这是 webpack 开箱可用的自带能力. loader 让 webpack 能够去处理其他类型的文件,并 ...

  4. webpack使用css-loader跟style-loader加载css报错

    webpack使用css-loader跟style-loader加载css报错 webpack使用css-loader跟style-loader加载css报错 webpack.config.js 配置 ...

  5. 性能优化——图片压缩、加载和格式选择

    本文首发于政采云前端团队博客:性能优化--图片压缩.加载和格式选择 https://www.zoo.team/article/images-compress 前言 相信大家都听说过 "258 ...

  6. 浅谈性能优化之图片压缩、加载和格式选择

    原文链接:浅谈性能优化之图片压缩.加载和格式选择 在认识图片优化前,我们先了解下 [二进制位数]与[色彩呈现]的关系. 二进制位数与色彩 在计算机中,一般用二进制数来表示像素.在不同的图片格式中,像素 ...

  7. node中怎样将css导入到html,CSS无法使用Node.js加载到我的HTML代码中

    我想通过Node.js使用express()函数在localhost:3000中将CSS添加到我的HTML中. 不幸的是,有些奇怪.我一步一步按照教程中的步骤,但仍然无法加载我的CSS.我的style ...

  8. asp.net MVC发布iis无法加载css,js和图片

    今天真够郁闷的,遇到了在本地能运行的项目到了iis服务器那里就不行了,无法加载css,js和图片,这里说清楚一下先,关于asp.net 的MVC中这样的情况其实不少,但是之前遇到的是在visual s ...

  9. yii 加载php文件,Yii2框架加载css和js文件的方法分析

    本文实例讲述了Yii2框架加载css和js文件的方法.分享给大家供大家参考,具体如下: 1.第一步是要把我们的css.js文件放到web目录下 2.第二步修改assets/AppAsset.php文件 ...

最新文章

  1. .net wap强制输出WML
  2. 来!咱们聊聊如何把缓存玩出一种境界!
  3. 初入数据科学领域,你需要有七个这样的思维
  4. Win隐藏 Win10 中的3D对象、文档、音乐、图片、视频、下载、桌面7个文件夹
  5. ScrollReveal.js – 帮助你实现超炫的元素运动效果
  6. leetcode 112路径总和
  7. python 网络摄像头安装图解_网络摄像头在opencv-python和opencv-contrib-python...
  8. vscode 开发vue必备插件_vsCode开发vue项目必备插件
  9. thread_ThreadPoolExecutor
  10. 十三种技术文档模板_帮助企业制作帮助文档的6大“黑科技”工具!
  11. 配置交换空间与文件系统的备份
  12. Magisk如何针对性隐藏Root避免被检测
  13. dhtmlxGantt standard vs dhtmlxGantt pro
  14. 约翰诺依曼在1940年发明了计算机英语,冯诺依曼元胞自动机
  15. Java中API个人学习总结
  16. 通用css样式模板,
  17. 详解VMware Workstation 12 安装虚拟机
  18. JavaScript_牛客网_编程初学者入门训练(21-30题解)
  19. 搭建自动化测试平台(selenium+testng+maven+svn+Jenkins)【转自galen2016】
  20. ubuntu 16.04 nivida显卡驱动更新步骤

热门文章

  1. 如何将手机里的wav录音转换成mp3格式?
  2. BHAR-事件研究法-示例数据Stata计算代码
  3. The new life
  4. 海康威视面试经验总结
  5. 在FlashBuilder里的ActionScript工程中使用Flash CS5中的类 fl.controls库
  6. nginx代理内网多域名多端口公用一个外网端口
  7. (STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(2)
  8. 页面展开收起php代码,纯CSS3实现移动端展开和收起效果的示例代码
  9. flutter全屏时钟!Flutter尽然还能有这种操作!薪资翻倍
  10. 炼数成金Tensorflow学习笔记之2.4_Tensorflow简单示例