webpack_02 (loader)
加载Css css-loader
#css-loader的安装 npm install css-loader -D #内联方式 import "css-loader!../css/style.css"; #配置方式 webpack.config.js module: { rules: [ { test: /\.css$/, // loader: "css-loader", // use: ["css-loader"], use: [ { loader: 'css-loader'} ] } ] }
style-loader 让css生效
#style-loader安装 npm install style-loader -D #因为loader的执行顺序是从右向左(或者说从下到上,或者说从后到前的),所以我们需要将styleloader写到css-loader的前面 { test: /\.css$/, use: ['style-loader', 'css-loader', 'less-loader'] }
处理less
#使用less工具来编译转换成css npm install less -D npx lessc ./src/css/title.less title.css less-loader处理 #安装 npm install less-loader -D #配置 { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }
PostCSS
以帮助我们进行一些CSS的转换和适配,比如自动添加浏览器前缀、css样式的重置;
如何使用PostCSS呢?主要就是两个步骤:
第一步:查找PostCSS在构建工具中的扩展,比如webpack中的postcss-loader;
第二步:选择可以添加你需要的PostCSS相关的插件;
参考 https://autoprefixer.github.io/
#安装工具postcss-cli npm install postcss postcss-cli -D
插件autoprefixer
#安装 npm install autoprefixer -D #直接使用使用postcss工具,并且制定使用autoprefixer npx postcss --use autoprefixer -o end.css ./src/css/style.css
webpack插件 postcss-loader
{ loader: 'postcss-loader', options: { postcssOptions: { plugins: [require('autoprefixer')] } } }
postcss-loader 可以单独引入postcss.config.js,
module.exports = { plugins: [require('postcss-preset-env')] } #plugins: [require('autoprefixer')]
加载图片
img元素,设置src属性;
其他元素(比如div),设置background-image的css属性;
file-loader
帮助我们处理import/require()方式引入的一个文件资源,并且会将它放到我们输出的文件夹中
options: {outputPath} 设置输出的文件夹
[ext]: 处理文件的扩展名
[name]:处理文件的名称;
[hash]:文件的内容,使用MD4的散列函数处理,生成的一个128位的hash值(32个十六进制);
[path]:文件相对于webpack配置文件的路径;
#安装file-loader npm install file-loader -D #配置 { test: /\.(png|jpe?g|gif|svg)$/, use: [ { loader: 'file-loader', options: { name: 'img/[name]_[hash:8].[ext]' } } ] }
url-loader
它和file-loader的工作方式是相似的,但是可以将较小的文件,转成base64的URI
小的图片转换base64之后可以和页面一起被请求,减少不必要的请求过程;
#安装url-loader npm install url-loader -D #配置 { test: /\.(png|jpe?g|gif|svg)$/, use: [ { loader: 'url-loader', options: { name: 'img/[name]_[hash:8].[ext]', limit: 10 * 1024 } } ] }
认识asset module type
在webpack5之前,加载这些资源我们需要使用一些loader,比如raw-loader 、url-loader、file-loader;
在webpack5开始,我们可以直接使用资源模块类型(asset module type),来替代上面的这些loader;
资源模块类型(asset module type),通过添加 4 种新的模块类型,来替换所有这些 loader:
asset/resource 发送一个单独的文件并导出 URL。之前通过使用 file-loader 实现;
asset/inline 导出一个资源的 data URI。之前通过使用 url-loader 实现;
asset/source 导出资源的源代码。之前通过使用 raw-loader 实现;
asset 在导出一个 data URI 和发送一个单独的文件之间自动选择。之前通过使用 url-loader,并且配置资源体积限制实现;
#自定义文件的输出路径和文件名呢? #方式一:修改output,添加assetModuleFilename属性; #方式二:在Rule中,添加一个generator属性,并且设置filename; { test: /\.(png|jpe?g|gif|svg)$/, type: 'asset', generator: { filename: 'img/[name]_[hash:6][ext]' //命名规则 }, parser: { dataUrlCondition: { maxSize: 100 * 1024 //url-loader limit } } }, { test: /\.(eot|ttf|woff2?)$/, type: 'asset/resource', generator: { filename: 'font/[name]_[hash:6][ext]' } }