【Webpack5笔记】处理打包各种资源(css资源、less资源、图片资源

33 阅读3分钟

'css-loader' ,//将css资源编译成commonjs的模块到js中

],

},

{

test: /.less$/,

//loader:'xxx', //只能使用1个loader

use: [

'style-loader', //将js中css通过创建style标签添加到html文件中生效

'css-loader' ,//将css资源编译成commonjs的模块到js中

'less-loader', //将less编译成css文件

],

}

]

},

//插件

plugins:[

//plugin的配置

].

//模式

mode:"development",

};

三、处理图片资源

=========

const path=require("path") //nodejs核心模块

module.exports={

//入口

entry:"./src/main.js", //相对路径

//输出

output:{

//文件的输出路径

//__dirname nodejs的变量,代表当前文件的文件夹目录

path:"path.resolve(__dirname,"dist")", //绝对路径

//文件名

filename:"main.js",

},

//加载器

module: {

rules: [

// loader的配置

{

test: /.css$/, //只检测.css的文件

use: [ //执行顺序:从右到左(从下到上)从css-loader开始执行,然后执行style-loader

'style-loader', //将js中css通过创建style标签添加到html文件中生效

'css-loader' ,//将css资源编译成commonjs的模块到js中

],

},

{

test: /.less$/,

//loader:'xxx', //只能使用1个loader

use: [

'style-loader', //将js中css通过创建style标签添加到html文件中生效

'css-loader' ,//将css资源编译成commonjs的模块到js中

'less-loader', //将less编译成css文件

],

},

//处理图片资源

{

test: /.(png|jpe?g|gif|webp|svg)$/,

type:"asset",

parser:{

dataUrlCondition:{

//小于10kb的图片转base64

//优点:减少请求数量 缺点:体积会更大

maxSize:10 * 1024 , //10kb

}

}

},

]

},

//插件

plugins:[

//plugin的配置

].

//模式

mode:"development",

};

四、修改输出文件目录

===========

如果都把文件输出到一个dist文件夹,会很乱。

 

我们可以给打包的文件分类,js文件去专门的js文件夹。如下:

output:{

//文件的输出路径

//__dirname nodejs的变量,代表当前文件的文件夹目录

path:"path.resolve(__dirname,"dist")", //绝对路径

//入口文件导报输出文件名

filename:"js/main.js",

},

图片的保存路径:

{

test: /.(png|jpe?g|gif|webp|svg)$/,

type:"asset",

parser:{

dataUrlCondition:{

//小于10kb的图片转base64

//优点:减少请求数量 缺点:体积会更大

maxSize:10 * 1024 , //10kb

}

},

generator:{

//输出图片名称

//hash是图片的hash值名称,冒号后面的数字为hash值截取的位数,ext是扩展名

filename:"static/image/[hash:10][ext][query]",

}

},

五、处理字体图标资源

===========

一般是阿里图标库里的字体和图标的资源 

{

test: /.(ttf|woff2?)$/,

type:"asset/resource",

generator:{

//输出名称

//hash是图片的hash值名称,冒号后面的数字为hash值截取的位数,ext是扩展名

filename:"static/media/[hash:10][ext][query]",

}

},

 

六、处理其他资源

=========

当有新资源如mp3,mp4等格式时,就在文件类型那里加上资源的类型就行。 

{

test: /.(ttf|woff2?|mp3|mp4|avi|)$/,

type:"asset/resource",

generator:{

//输出名称

//hash是图片的hash值名称,冒号后面的数字为hash值截取的位数,ext是扩展名

filename:"static/media/[hash:10][ext][query]",

}

},

七、处理js资源

=========

1、ESlint(plugin)


可组装的JavaScript和JSX检查工具,就是来检测JavaScript和JSX语法的工具,可以配置各项功能。EslintWebpackPlugin | webpack 中文文档

首先,需要安装 eslint-webpack-plugin

npm install eslint-webpack-plugin --save-dev

注意: 如果未安装 eslint >= 7 ,你还需先通过 npm 安装:

npm install eslint --save-dev

然后把插件添加到你的 webpack 配置。例如:

const ESLintPlugin = require('eslint-webpack-plugin');

module.exports = {

// ...

plugins: [

new ESLintPlugin({

//检测哪些文件

context:path.resolve(__dirname,"src"),

})

],

// ...

};

然后需要新建一个.eslintrc.js文件

内容如下:

module.exports={

//继承eslint规则

extends:["eslint:recommended"],

env:{ //环境变量

node:true,//启用node中全局变量

browser:true,//启用浏览器中全局变量

},

parsetOptions:{ //语法规则

ecmaVersion:6, //es6

sourceType:"module", //es module

},

rules:{

"no-var":2, //不能用var定义变量

}

}

但是有时候会对打包的其他资源产生报错,再新建一个.eslintignore

忽视dist文件 

2、Babel(loader)


主要用于将ES6语法编写的代码转换为向后兼容的JavaScript语法,以便能够运行在当前和旧版本的浏览器或其他环境。

安装:

webpack 4.x | babel-loader 8.x | babel 7.x

npm install -D babel-loader @babel/core @babel/preset-env webpack

用法: 

webpack 文档:Loaders

在 webpack 配置对象中,需要将 babel-loader 添加到 module 列表中,就像下面这样:

module: {

rules: [

{

test: /.m?js$/,

exclude: /(node_modules|bower_components)/, //排除这些文件中的js文件(这些文件不处理)

use: {

loader: 'babel-loader',

//options: {

// presets: ['@babel/preset-env']

//}

}

}

]

}

Babel的配置(options)也可以单独写,方便修改,如果在外面写就要新建文件babel.config.js 

 

module.exports={

//智能预设,能够编译es6的语法

presets: ['@babel/preset-env'],

}

八、处理html资源

===========

安装: 

npm install --save-dev html-webpack-plugin

基本用法: 

该插件将为你生成一个 HTML5 文件, 在 body 中使用 script 标签引入你所有 webpack 生成的 bundle。 只需添加该插件到你的 webpack 配置中,如下所示:

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

const path = require('path');

module.exports = {

entry: 'index.js',

output: {

path: path.resolve(__dirname, './dist'),

filename: 'index_bundle.js',

},

最后

小编综合了阿里的面试题做了一份前端面试题PDF文档,里面有面试题的详细解析

虽只说了一个公司的面试,但我们可以知道大厂关注的东西并举一反三,通过一个知识点延伸到另一个知识点,这是我们要掌握的学习方法,小伙伴们在这篇有学到的请评论点赞转发告诉小编哦,谢谢大家的支持! 开源分享:docs.qq.com/doc/DSmRnRG…