webpack配置实战

126 阅读3分钟

前言

本篇内容是为了熟悉webpack配置进行的练习,搜索webpack.docschina.org/guides/官网指南进行的配置实操。

实战记录

当前目录:

image.png

css文件处理

使用场景:需要在js文件中引入css文件,对css文件进行解析运用到指定dom上
问题解决:
 css-loader+style-loader

1.在入口文件中index.js里导入css文件:

image.png 此时进行打包,会提示错误。大致意思就是js文件无法识别css。

image.png 2.如何让css在js引入中不报错,且自动添加到html的style中呢?在webpack.config.js文件中配置loader规则:

image.png 此时重新进行打包,浏览器中查看dom结构,会发现head中存在css文件中书写的样式:

image.png

图片处理配置+font字体

使用场景
1.在css中存在url('./icon.jpg')
2.在js中导入本地图片
3.使用js在html中插入img标签

解决方法:
在webpack.config.jsmodule中配置loader规则
  module: {
        rules: [
            {
                test: /\.(png|svg|jpg|jpeg|gif)$/i,
                type: 'asset/resource',
            },
        ],

    },
    
 补充:针对font字体的处理,与上述同理
 使用场景:
 css文件中对字体文件的加载:
 @font-face {
  font-family: 'MyFont';
  src: url('./my-font.woff2') format('woff2'),
    url('./my-font.woff') format('woff');
  font-weight: 600;
  font-style: normal;
}


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

没有配置loader规则,在js文件中导入本地图片是会报错的:

image.png 加入配置之后,打包后会将图片单独抽离出来,并将开发时的本地文件路径替换成打包之后的真正路径:

image.png

打包之后页面正常显示:

image.png

多文件输出

配置:
    entry: {
        index: './src/index.js',
        print: './src/print.js',
      },
    output: {
        // filename: 'bundle.js',//在js中引入css文件,并解析放到dom中
        filename:'[name].bundle.js',
        // path: path.resolve(__dirname, 'dist'),
        path: resolveApp('dist')
    },

打包结果:

image.png

HtmlWebpackPlugin

作用:
打包的时候自动生成html文件,并且将打包的主文件路径添加到里面

image.png

清理dist文件

image.png

在每次打包前,都先将之前的dist文件进行清空操作

打包编译后的代码错误映射到源码

 devtool: 'inline-source-map',

实施监听自动编译

如果在每次更改完成代码之后,希望自动重新编译,更新页面内容。可以借助以下工具
1."watch": "webpack --watch" webpack提供的mode观察模式
2. webpack-dev-server (https://github.com/webpack/webpack-dev-server) 此方法是最常用的,简称热更新
3. webpack-dev-middleware(https://github.com/webpack/webpack-dev-middleware)
这种方式更像是事实监听,将编译好的页面挂载到后台服务器上进行显示,webpack-dev-middleware 则是两者之间的桥接

代码分离

场景:通常在对项目进行优化的时候,会采用代码分离的方式,减小首次加载chunk.js的大小,从而减少加载时间
分离chunk.js的方式:
1.在entry中配置多文件输出
entry: {
        index: './src/index.js',
        another: './src/another-module.js',
        //以下是手动抽离公共模块的方式
        // index: {
        //     import: './src/index.js',
        //     dependOn: 'shared',
        // },
        // another: {
        //     import: './src/another-module.js',
        //     dependOn: 'shared',
        // },
        // shared: 'lodash',
    },
    注意:多文件入口需要添加以下配置:
     optimization: {
          runtimeChunk: 'single',
     },

补充:若开发者知晓多文件入口的公共模块,为了避免多文件打包编译后都存在重复模块,可以将公共模块手动抽离出来
2. SplitChunksPlugin插件
 optimization: {
     splitChunks: {
       chunks: 'all',
     },
   },

拆分bound可以借助的工具

1686035202249.png

CSS 从主应用程序中分离 —— mini-css-extract-plugin
简单说就是将每一个js中的css文件都抽离出来,作为一个单独的文件

配置步骤:
npm install --save-dev mini-css-extract-plugin
webpack.config.js中配置以下信息:

const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const devMode = process.env.NODE_ENV !== 'production'
  plugins: [
        //将css文件单独抽离
        new MiniCssExtractPlugin({
            // Options similar to the same options in webpackOptions.output
            // both options are optional
            filename: devMode ? "[name].css" : '[name].[hash].css',
            chunkFilename: devMode ? "[id].css" : '[id].[hash].css'
        })
    ],
 module: {
        rules: [
            {
                test: /\.css$/i,
                use: [devMode ? 'style-loader' : MiniCssExtractPlugin.loader, 'css-loader'],
                //顺序是从右往左解析
            }
        ],

    },