webpack(一)——资源模块,loader,代码分离,缓存

简介: 安装webpack安装webpack需要两个主包,在Vscode上新建一个文件夹,在终端打开,输入node -v检测是否安装了nodejs输入npm -v输入npm install webpack webpack-cli --global安装webpack,会产生一个文件package.json输入命令webpack -v是否安装成功
安装webpack

安装webpack需要两个主包,在Vscode上新建一个文件夹,在终端打开,

  • 输入node -v检测是否安装了nodejs
  • 输入npm -v
  • 输入npm install webpack webpack-cli --global安装webpack,会产生一个文件package.json
  • 输入命令webpack -v是否安装成功

<hr/>

一、资源模块

  1. resource

修改配置文件webpack.config.js

module:{
   rules:[{
     test:/\.png/,
     type:'asset/resource'
   }]
}

输入npx webpaack自定义文件名
在这里插入图片描述
在这里插入图片描述
generator的优先级是大于asset的

  1. inline资源
module:{
   rules:[{
     test:/\.svg/,
     type:'asset/inline'
   }]
}
  1. source
  2. 通用资源 类型

通用资源类型asset,在导出一个data URI和发送一个单独文件之间自动选择。

现在webpack将按照默认条件自动地在resource和inline之间进行选择,小于8kb的文件会视为inline模块,否则视为resource

在这里插入图片描述

二、loader

  1. 加载CSS

    在终端输入npm install css-loader -D安装css-loader

//在webpack.config.js进行配置
{
test:/\.css$/,
use:['style-loader','css-loader']
}
  1. 抽离和压缩CSS

在多数环境下压缩CSS可以在生产环境中节省加载时间,同时可以将css文件抽离成一个单独的文件

需要在终端输入npm install mini-css-extract --save-dev
//在webpack.config.js进行配置
rules:[{
test:/\.css$/i,
use:['MiniCssExtractPlugin.loader','css-loader']
}]

可以自己设定文件名,如下所示

new MiniCssExtractPlugin({
filename:'styles/[contenthash].css'
})
  1. 加载images图像

    可以在加载CSS时处理图像

//在style.css中修改
.block-bg {
background-image:url(./assets/webpack-logo.svg);

//在index.js文件中修改
block.style.cssText:'width:200px,height:200px;background-color:#2b3a42'
block.cssList.add('block-bg')
  1. 加载fonts字体

使用Asset Modules可以接收并加载任何文件,然后将其输出到构建目录
在这里插入图片描述

  1. 加载数据
可以加载的有用资源,如JSON文件,csv,tsv,xml,类似于Node.js,JSON支持实际上是内置的,也就是说import
Data from './data.json'默认正常进行。

要导入csv,tsv,xml,可以使用csv-loader和xml-loader,处理加载

在终端输入npm install --save-dev csv-loader xml-loader

//在webpack.config.js中添加配置
module:{
  rules:[{
    test:/\.(csv|tsv)$/i,
    use:['csv-loader'],
  },{
   test:/\.(xml)$/i,
    use:['xml-loader'], },
    ]
}
  1. 自定义 JSON 模块parser

    通过自定义parser替代特定的webpack loader,可以将任何toml,yaml或json5文件作为JSON模块导入
    在这里插入图片描述

在这里插入图片描述

//在webpack.config.js中添加配置
{test:/\.toml$/,
type:'json',
parser:{parse:toml.parse}
},
{test:/\.yaml$/,
type:'json',
parser:{parse:yaml.parse}
},
{test:/\.json5$/,
type:'json',
parser:{parse:json.parse}
},
  1. babel-loader

在终端输入 npm install -D babel-loader @babel/core @babel/preset-env

  • babel-loader 在webpack里应用babel解析ES6的桥梁
  • @babel/core babel核心模块
  • @babel/preset-env babel-loader预设,一组babel插件的组合

三、代码分离

  1. 入口起点

    这是最简单直观的分类代码的方式

    先在JS文件里导入lodash,因此需要安装

在终端输入 npm install lodash --save-dev
然后修改一下配置文件,如下所示

在这里插入图片描述

  1. 防止重复

配置dependOn option选项,可以在多个chunk之间共享模块:

  1. 动态导入

    当 涉及到动态代码拆分时,webpack提供了两个技术,第一种,也是推荐选择的方式,使用import()语法来实现动态导入,第二种,使用webpack遗留功能使用require.ensure

    4.懒加载(按需加载)

    这种方式实际上最先把你的代码在一些逻辑断点处分离开,然后在一些代码中完成某些操作后,立即引用或即将引用另一些新的代码块
    在这里插入图片描述

四、缓存

  1. 输入文件的文件名
可以通过替换output.filename中的substitutions设置,来定义输出文件的名称
//在webpack.config.js中
output: {
    filename:'[name].[contenthash].js',
        path:path.resolve(_dirname,'./dist'),
            clean:true,
                assetModuleFilename:'images/[contenthash][ext]'
},
    //在集成终端打开 
  1. 缓存第三方库
splitChunks: {
    cashGroups:{
        vendor:{
            test:/[\\/]node_modules[\\/]
            name:'vendors',
                chunks:'all '
        }
    }
}
//打包到vendors.bundle.js
  1. 将 JS 文件放到一个文件夹中

当项目部署到服务器上时浏览器会加载完服务器上的文件会缓存好我们打包好的模块,这样如果我们修改了业务代码,文件名如果没有变,浏览器会使用用户本地缓存内容,

  • 这就需要修改文件的文件名解决,使用可替换模板字符串的方法来定义contenthash, 能实现文章的内容不变,哈希的字符串就不变
  • 第三方代码也需要缓存,通过修改optiminzationChunks属性来实现,可以定义一个casheGroups这个缓存组将们业务代码引用的第三方文件,打包到一个文件中在浏览器中缓存
  • 将所有的JS文件都打包到了一个叫scripts的文件夹中,这就实现了样式,图片,字体JS,等全部资源打包

几个常见的loader

file-loader:把文件输出到一个文件夹中,在代码中通过相对 URL 去引用输出的文件

url-loader:和 file-loader 类似,但是能在文件很小的情况下以 base64 的方式把文件内容注入到代码中去

source-map-loader:加载额外的 Source Map 文件,以方便断点调试

image-loader:加载并且压缩图片文件

babel-loader:把 ES6 转换成 ES5

css-loader:加载 CSS,支持模块化、压缩、文件导入等特性

style-loader:把 CSS 代码注入到 JavaScript 中,通过 DOM 操作去加载 CSS。

eslint-loader:通过 ESLint 检查 JavaScript 代码

目录
相关文章
|
15天前
|
存储 缓存 监控
网站的图片资源是否需要设置缓存?
【10月更文挑战第18天】网站的图片资源一般是需要设置缓存的,但要根据图片的具体特点和网站的需求,合理设置缓存时间和缓存策略,在提高网站性能和用户体验的同时,确保用户能够获取到准确、及时的图片信息。
|
1月前
|
前端开发 UED
Webpack 中处理 CSS 和图片资源的多 Loader 配置
【10月更文挑战第12天】 处理 CSS 和图片资源是 Webpack 配置中的重要部分。通过合理选择和配置多个 Loader,可以实现对这些资源的精细处理和优化,提升项目的性能和用户体验。在实际应用中,需要不断探索和实践,根据项目的具体情况进行灵活调整和优化,以达到最佳的处理效果。通过对 Webpack 中多 Loader 处理 CSS 和图片资源的深入了解和掌握,你将能够更好地应对各种复杂的资源处理需求,为项目的成功构建和运行提供坚实的基础。
53 1
|
1月前
|
前端开发 JavaScript
Webpack 中多个 Loader 的配置
【10月更文挑战第12天】使用多个 Loader 进行配置是 Webpack 中常见的操作,可以实现对各种资源的精细处理和优化。在配置时,需要根据具体需求合理选择和排列 Loader,并注意它们之间的顺序和交互关系。同时,不断了解和掌握新的 Loader 以及它们的特性,有助于更好地发挥 Webpack 的强大功能,提升项目的开发效率和质量。通过深入理解和熟练运用多个 Loader 的配置方法,你将能够更加灵活地处理各种资源,满足项目的多样化需求。
43 2
|
1月前
|
前端开发 JavaScript
Webpack 常用 Loader 和 Plugin
【10月更文挑战第12天】Webpack 是一个强大的模块打包工具,能够将各种资源模块进行打包和处理。Loader 用于转换模块的源代码,如 `babel-loader` 将 ES6+ 代码转换为 ES5,`css-loader` 处理 CSS 文件等。Plugin 扩展 Webpack 功能,如 `HtmlWebpackPlugin` 自动生成 HTML 文件,`UglifyJsPlugin` 压缩 JavaScript 代码。通过合理配置和使用 Loader 和 Plugin,可以构建高效、优化的项目。
21 2
|
1月前
|
缓存 前端开发 JavaScript
深入了解Webpack:模块打包的革命
【10月更文挑战第11天】深入了解Webpack:模块打包的革命
|
1月前
|
存储 缓存 分布式计算
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
42 4
|
2月前
|
缓存 监控
如何解决协商缓存中资源更新不及时的问题?
如何解决协商缓存中资源更新不及时的问题?
|
30天前
|
缓存 前端开发 JavaScript
Webpack技术深度解析:模块打包与性能优化
【10月更文挑战第13天】Webpack技术深度解析:模块打包与性能优化
|
2月前
|
设计模式 前端开发 JavaScript
webpack实战之手写一个loader和plugin
该文章详细讲解了如何从零开始编写一个自定义的Webpack Loader和Plugin,包括它们的工作原理、开发步骤以及如何将自定义的Loader和Plugin集成到Webpack配置中。
webpack实战之手写一个loader和plugin
|
2月前
|
前端开发
umi webpack配置图片资源转base64
umi webpack配置图片资源转base64