webpack5学习笔记

举报
代码哈士奇 发表于 2022/01/13 00:33:14 2022/01/13
【摘要】 webpack5学习笔记 cdn资源 cdn资源 webpack官网 webpack插件 webpack笔记 解决作用域问题 快速执行函数 ;(function(){ … }) 解决代码拆分...

webpack5学习笔记

cdn资源 cdn资源

webpack官网

webpack插件

webpack笔记

解决作用域问题
快速执行函数

;(function(){

})

解决代码拆分问题
node
commonjs
模块化

解决浏览器支持问题
requirejs

想要主js调用别的js要在主js前引入

hello.js
export hello()

main.js
hello()

import hello.js
import main.js

安装webpack

先安装node

然后安装webpack webpack-cli 全局安装(不推荐,会锁定版本)

npm install webpack webpack-cli --global

本地安装

npm init 
npm install webpack webpack-cli --save-dev 


  
 
  • 1
  • 2
  • 3

cmd cls清屏

webpack打包

webpakc

  
 
  • 1

webpack --stats detailed 查看详细打包信息

npx牛逼

配置入口文件(指令不如文件配置不可保存)

webpack --entry xxx

加 --mode production生产环境

配置出口

output

文件配置

webpack.config.js文件

绝对路径 使用 require(‘path’)

path.resolve(__dirname,'xxx')

module.exports = {
	entry:'',
	
	output:{
		filename: '',
		path: '结对路径''
	}
	
	
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

自动引入资源

插件-html-webpack-plugin

npm install html-webpack-plugin

  
 
  • 1

引入

const HtmlWebpackPlugin = require('html-webpack-plugin') 

  
 
  • 1

在根{}下


plugins:[
	new HtmlWebpackPlugin()
]

配置HtmlWebpackPlugin
new HtmlWebpackPlugin({
	template: './index.html', 模板文件
	filename: 'app.html', 生成文件名
	inject: 'body' 在哪个标签引入
})


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

清理dist(清理旧的打包)

在output选项里面

output:{
		filename: '',
		path: '结对路径'',
		clean: true
	}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

搭建开发环境

mode选项

定位错误

更好显示代码定位错误

devtool: 'inline-source-map',

  
 
  • 1

监听代码变化

webpack --watch

  
 
  • 1

使用 webpack-dev-server

npm install webpack-dev-server

  
 
  • 1

加-D 在本地开发环境运行

在 配置文件中

devServer: {
	devServer: {
		static: './dist'  //注意这里的./dist是路径
	}
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

在控制台 webpack-dev-server

资源模块

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在js 文件中引入

import imgsrc from './assets/img-1.png'

const img = document.createElement('img') 创建一个照片元素
img.src = imgsrc 添加路径
document.body.appendChild(img) 将照片添加进页面

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

webpack-dev-server --open 加–open 默认打开

在output中定义导出路径以及名字

output: {
		filename: 'bundle.js',
		path: path.resolve(__dirname,'./dist'),
		clean: true,
		assetModuleFilename: 'images/test.png'
	},

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

assetModuleFilename: ‘images/[contenthash].png’
[contenthash]可自动根据hash来生成文件名

assetModuleFilename: ‘images/[contenthash][ext]’
[contenthash]可自动根据hash来生成文件名以及扩展名

若在module rules generator配置
则generator高于output

inline配置资源 使图片变成base64资源

使图片变成base64资源

test: /\.svg$/,
type: 'asset/inline'

  
 
  • 1
  • 2

配置source

test: /\.txt$/,
type: 'asset/source

  
 
  • 1
  • 2

配置asset

test: /\.jpg$/,
type: 'asset'

  
 
  • 1
  • 2

自动选择url还是文件base64 一般小于8k会生成base64

可通过追加 parser 来控制

test: /\.jpg$/,
type: 'asset',
parser: {
    dataUrlCondition: {
        maxSize: 4*1024  //默认大小4*1024 
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

loader使用

安装css-loader以及style-loader

执行

npm install css-loader -D

npm install style-loader -D

  
 
  • 1
  • 2
  • 3

配置

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

  
 
  • 1
  • 2
  • 3
  • 4

在index.js引入
import ‘./style.css’

先执行css-loader再执行style-loader

安装配置less-loader css-loader

npm install less-loader less -D

  
 
  • 1

配置

{
    test: /\.(css|less)$/,
    use: ['style-loader','css-loader','less-loader']
}

  
 
  • 1
  • 2
  • 3
  • 4

在index.js引入
import ‘./style.less’

抽离和压缩css

安装插件

npm install mini-css-extract-plugin -D

  
 
  • 1

在webpack.js引入

const MiniCssExtract = require(‘mini-css-extract-plugin’)

在plugins中添加

new MiniCssExtract()

配置

{
    test: /\.(css|less)$/,
    use: [MiniCssExtract.loader','css-loader','less-loader']
}

  
 
  • 1
  • 2
  • 3
  • 4

更换style-loader为MiniCssExtract.loader

style-loader作用是将css连接到页面
而为了抽离改为MiniCssExtract.loader

自定义生成的文件名

new MiniCssExtract({
filename: ‘styles/[contenthash].css’
})

压缩

安装插件

npm install css-minimizer-webpack-plugin -D

  
 
  • 1

引入

const CssMinimizerPlugin = require(‘css-minimizer-webpack-plugin’)

在优化配置中配置

webpack配置根级

optimization: {
	minimizer: [
		new CssMinimizerPlugin()
	]
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

且mode更换为生产环境

mode: ‘production’,

加载images图像

图片优先级

.block-bg{
background-image: url(./assets/webpack-logo.svg) !important;
}

!important 使优先级最高

加载字体

配置webpack

{
    test: /\.(woff|woff2|eot|ttf|otf)$/,
    type: 'asset/resource'
}

  
 
  • 1
  • 2
  • 3
  • 4

在css文件引入字体文件

@font-face {
    font-family: 'iconfont';
    src: url('./assets/iconfont.ttf');
}

.icon{
    font-family: 'iconfont';
    font-size: 30px;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在index.js引入字体

const span = document.createElement('span')

span.classList.add('icon')
span.innerHTML = ''
document.body.appendChild(span)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

加载数据 csv-loader xml-loader

安装

npm install csv-loader xml-loader -D

  
 
  • 1

配置

{
    test: /\.(csv|tsv)$/,
    usr: 'csv-loader'
},

{
    test: /\.xml$/,
    usr: 'xml-loader'
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

引入数据在index.js

import Data from './assets/data.xml'
import Notes from './assets/data.csv'

  
 
  • 1
  • 2

xml转成js对象

csv转换为数组

自定义JSON的parser 例如toml yaml json5

安装

npm install toml yaml json5 -D

  
 
  • 1

配置webpack

const toml = require('toml')
const yaml =require('yaml')
const json5 = require('json5')

  
 
  • 1
  • 2
  • 3
{
	test: /\.toml$/,
	type: 'json',
	parser: {
		parse: toml.parse
	}
},

{
	test: /\.yaml$/,
	type: 'json',
	parser: {
		parse: yaml.parse
	}
},

{
	test: /\.json5$/,
	type: 'json',
	parser: {
		parse: json5.parse
	}
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

使用文件

文章来源: dmhsq.blog.csdn.net,作者:代码哈士奇,版权归原作者所有,如需转载,请联系作者。

原文链接:dmhsq.blog.csdn.net/article/details/122435393

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。