webpack入门笔记

Posted 月岛蘑菇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack入门笔记相关的知识,希望对你有一定的参考价值。

起一个webpack server预览项目

运行webpack-server服务器

webpack-dev-server --mode development --open

可以通过在package.json中配置script来简化命令

  "scripts": {
    "test": "echo \\"Error: no test specified\\" && exit 1",
    "dev": "webpack-dev-server --mode development --open",
    "build": "webpack --mode production"
  }

配置热更新---HMR

const webpack = require(\'webpack\')
plugins: [
  new webpack.HotModuleReplacementPlugin()
],
devServer: {
  hot: true
}

在入口文件里添加热更新配置

// index.jsx

if(module.hot) {
  module.hot.accept(error => {
    if(error) {
      console.log(\'HRM出BUG了\')
    }
  })
}

webpack性能优化

打包结果优化 & 构建速度优化

压缩代码
webpack自带了一个压缩plugin

const TerserPlugin = require(\'terser-webpack-plugin\')

module.exports = {
//  ...
  // 压缩代码选项
  optimization: {
    minimizer:  [new TerserPlugin({
      // 加快构建速度
      cache: true,
      // 开启多线程
      parallel: true,
      terserOptions: {
        // 移除无用代码
        compress: {
          unused: true,
          drop_debugger: true,
          drop_console: true,
          dead_code: true
        }
      }
    })]
  }
//  ...
}

webpack打包结果分析器

npm install webpack-bundle-analyzer
// webpack.config.js
 const BundleAnalyZerPlugin = require(\'webpack-bundle-analyzer\').BundleAnalyZerPlugin
  // ...
  plugins: [
    // ...
    new BundleAnalyZerPlugin()
  ]
  // ...

加快构建速度的其他思路

// webpack.config.js
// ...
  module: {
    // 优化解析时间,跳过一些没有模块化的包,如不解析jquery
    noParse: /node_modules\\/(jquery\\.js)/,
    // 减少查找
    test: /\\.jsx?/,
    exclude: /node_modules/,  //优先级最高,排除某些文件
    include: / /  // 只打包某些文件
    // 三者冲突时,exclude优先级最高
  }
// ...

多进程打包工具
HappyPack -- plugin(有部分loader不支持HappyPack)
thread-loader -- loader(需要写在所有loader前面)

Tree-Shaking(消除不好的js代码)

如引入的模块没有使用,webpack会检测这个模块,没有使用将不会被打包

以上是关于webpack入门笔记的主要内容,如果未能解决你的问题,请参考以下文章

webpack入门笔记

webpack入门笔记

webpack入门笔记

webpack书本总结,入门webpack必备

webpack书本总结,入门webpack必备

webpack入门学习笔记03 —— 自定义脚本,帮助项目管理