加载css (npm install style-loader css-loader —save-dev)

  1. module.exports = {
  2. ...,
  3. module: {
  4. rules: [
  5. {
  6. test:/\.css$/i,
  7. use:['style-loader','css-loader']
  8. },
  9. ]
  10. }
  11. }

MiniCssExtractPlugin (npm install mini-css-extract-plugin —save-dev)

  1. module.exports = {
  2. plugins: [
  3. new MiniCssExtractPlugin({
  4. filename: "css/[name].css"
  5. })
  6. ]
  7. rules:[
  8. {
  9. test: /\.css$/i,
  10. use:[MiniCssExtractPlugin.loader, "css-loader"]
  11. }
  12. ]
  13. }

本插件会将 CSS 提取到单独的文件中,为每个包含 CSS 的 JS 文件创建一个 CSS 文件,并且支持 CSS 和 SourceMaps 的按需加载。

加载images

  1. module.exports = {
  2. ...,
  3. module: {
  4. rules: [
  5. {
  6. test:/\.css$/i,
  7. use:['style-loader','css-loader']
  8. },
  9. {
  10. test:/\.(png|svg|jpg|jpeg|gif)$/i,
  11. type:"asset/resource"
  12. },
  13. ]
  14. }
  15. }

webpack 5

https://webpack.docschina.org/guides/asset-modules/#custom-output-filename
在 webpack 5 之前,通常使用:

资源模块类型(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,并且配置资源体积限制实现。

当在 webpack 5 中使用旧的 assets loader(如 file-loader/url-loader/raw-loader 等)和 asset 模块时,你可能想停止当前 asset 模块的处理,并再次启动处理,这可能会导致 asset 重复,你可以通过将 asset 模块的类型设置为 'javascript/auto' 来解决。

  1. module.exports = {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.(png|jpg|gif)$/i,
  6. use: [
  7. {
  8. loader: 'url-loader',
  9. options: {
  10. limit: 8192,
  11. }
  12. },
  13. ],
  14. type: 'javascript/auto'
  15. },
  16. ]
  17. },
  18. }

webpack5打包iconfont 和图片资源

  1. {
  2. test: /\.(png|svg|jpg|jpeg|gif)$/i,
  3. type: 'asset/resource',
  4. generator: {
  5. filename: 'static/img/[hash][ext][query]'
  6. }
  7. },
  8. {
  9. test: /\.(woff|woff2|eot|ttf|otf)$/i,
  10. type: 'asset/resource',
  11. generator: {
  12. filename: 'static/icon/[hash][ext][query]'
  13. }
  14. },