webpack Plugins列表

本文介绍如何使用Happypack、DllPlugin、CommonsChunkPlugin等工具优化Webpack构建流程,涵盖多线程构建、依赖管理、资源优化及压缩等方面,旨在显著提升项目构建速度。
  • happypack 能使得webpack进行node多线程构建项目,从而提高构建速度
    • const os = require('os')
      const HappyPack  = require('happypack')
      const happThreadPool = HappyPack.ThreadPool({size: os.cpus().length}) // 采用多进程,进程数由CPU核数决定
      
      plugins:[
          new HappyPack({
              id: 'js',
              cache: true,
              loaders: ['babel-loader?cacheDirectory=true'],
              threadPool: happThreadPool
          }),
      ]
  • dllplugin
    • 把所有的webpack的依赖关系到处成一个.json文件,然后可以下次接着用,类似于maven功能。
  • commons-chunk-plugin
    • 的作用是用来提取项目中公共依赖模块到一个新的chunk�,一般用于抽离类库node_modules。
  • webpack-dev-server
    • 用于跟着服务器启用一个localhost/webpack-dev-server/ ,用于热更新。
  • webpack-dev-middleware
    • 在webpack-cli中我们会启动开发模式webpack --wactch来观察代码的改动从而进行重新构建。类似的,webpack-dev-middleware起了一个中间件的作用,用它输出的文件会存在内存里,构建速度相当快,所以�可以利用它配合服务器(如express)作为静态资源服务器(本地)用于开发

  • http-proxy-middleware
    • webpack本地开发的时候,设置代理,后来是使用到proxyTable来解决代替了。
  • html-webpack-plugin
    • 它会用于生成一个html文件,并将最终生成的js,css以及一些静态资源文件以scriptlink的形式动态插入其中。你可以自定义这个html也可以让插件生成一个新的html。
  • extract-text-webpack-plugin
    • 会将你项目中的css都单独打包,不会内嵌到js bunlde中,这样css和js即可并行加载,而代价就是额外的http请求。
    • module: {
          rules: [
            {
              test: /\.css$/,
              loader: ExtractTextPlugin.extract('style-loader', 'css-loader')
            }
          ]
      },
      plugins: [
          new ExtractTextPlugin({
              filename: 'css/[name].[contenthash].css'
          })
      ]
  • optimize-css-assets-webpack-plugin
    • optimize-css-assets-webpack-plugin对css文件进行优化和最小化操作
    • plugins: [
          new OptimizeCssAssetsPlugin({
            assetNameRegExp: /\.optimize\.css$/g,
            cssProcessor: require('cssnano'),
            cssProcessorOptions: { safe: true, discardComments: { removeAll: true } },
            canPrint: true
          })
      ]
  • uglifyjs-webpack-plugin
    • uglifyjs-webpack-plugin对js文件进行压缩并且结合tree shaking删除未引用代码
    • plugins: [
          new webpack.optimize.UglifyJsPlugin({
              compress: {
                  warnings: false,
                  drop_console: true
              },
              sourceMap: true
          })
      ]
  • imagemin-webapack-plugin
    • imagemin-webapack-plugin顾名思义就是对项目中的图片进行压缩~
    • plugins: [
          new ImageminPlugin({
              test: /\.(jpe?g|png|gif|svg)$/i,
              disable: process.env.NODE_ENV !== 'production', // Disable during development
              pngquant: {
                  quality: '90-100'
              },
              gifsicle: {
                  optimizationLevel: 2,
                  interlaced: true
              },
              optipng: {
                  optimizationLevel: 4,
              },
              jpegtran: {
                  progressive: true
              }
          }),
      ]
  • copy-webpack-plugin
    • 对资源进行拷贝,例如一些静态资源直接拷贝到打包后的文件夹中
    • new CopyWebpackPlugin([
              {
                  from :'html',
                  to:'html'
              },
              {
                  context: 'global/img',
                  from: '**/*',
                  to:'img/common'
              },
              {
                  from: 'img',
                  to:'img'
              },
              {
                  from :'global/lib/es5-shim-sham.js'
              }
      ])

 

### Webpack 插件执行顺序及配置指南 Webpack 的插件机制是一个强大的工具,用于扩展其功能并满足各种构建需求。以下是关于 Webpack 插件的执行顺序及其正确配置方法的详细介绍。 #### 1. 插件执行顺序 Webpack 中插件的执行顺序由以下几个因素决定: - **声明顺序**:在 `webpack.config.js` 文件中的 `plugins` 数组里,插件按照定义的先后顺序被调用[^2]。 ```javascript const HtmlWebpackPlugin = require('html-webpack-plugin'); const CleanWebpackPlugin = require('clean-webpack-plugin'); module.exports = { plugins: [ new CleanWebpackPlugin(), // 清理旧文件 new HtmlWebpackPlugin() // 创建新的 HTML 文件 ] }; ``` - **钩子机制**:每个插件通过注册到特定的编译生命周期事件上来运行自己的逻辑。这些事件包括但不限于 `compile`, `make`, 和 `emit` 等阶段[^3]。这意味着即使两个插件在同一数组位置声明,它们的实际触发时间取决于所监听的具体钩子点。 #### 2. 正确配置插件的方法 为了确保插件能够按预期工作,在配置过程中需要注意以下几点: - **理解依赖关系**:某些插件可能需要其他插件先完成操作才能正常运作。例如,`HtmlWebpackPlugin` 常常配合 `MiniCssExtractPlugin` 使用来处理 CSS 资源链接注入等问题[^4]。 - **参数调整适配项目需求**:每种类型的插件都有各自独特的选项可供自定义。合理设置这些选项可以使打包过程更加高效或者产出更优化的结果[^5]。 - **测试验证效果**:每次引入新插件之后都应该重新构建整个应用,并仔细检查最终产物是否符合期望目标[^6]。 ```javascript const path = require('path'); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); module.exports = { output: { filename: '[name].[contenthash].js', path: path.resolve(__dirname, 'dist') }, module: { rules: [{ test: /\.css$/, use: [MiniCssExtractPlugin.loader, "css-loader"] }] }, plugins: [ new MiniCssExtractPlugin({ filename: "[name].[contenthash].css" }) ], }; ``` #### 总结 掌握好 Webpack 插件之间的相互作用规律对于提升前端工程化水平至关重要。遵循上述指导原则可以帮助开发者更好地管理和利用各类插件资源,从而实现更为精细化和个性化的构建流程控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值