webpack的基础配置

webpack 基础

  • 主要讲述的是webapack的常用方法与项目中遇见的常见问题,自己搭建webpack配置,根据项目的情况进行配置。

webpack.config.js

webpack默认的基础配置入口,真正的项目会根据开发环境自定义不同的入口


  • npm init -y (初始化page.json,依赖包的管理)
  • webpack webpack-cli(webpack的依赖环境)
  • @babel/preset-env @babel/core babel-loader (babel解析)
  • @babel/preset-react @vue/babel-preset-app(react/vue)
  • css-loader style-loader url-loader (css解析,css中图片的解析,url可以设置图片的参数base64打包)
  • mini-css-extract-plugin (拆分独立css,与style-loader冲突,用MiniCssExtractPlugin.loader代替)
  • postcss-loader (css解析成AST,配合autoprefixer实现css的补全能,支持不同浏览器的配置)
  • @babel/plugin-syntax-dynamic-import 动态import插件
  • friendly-errors-webpack-plugin 打包提示
{
    loader: 'postcss-loader',
      options: {
         plugins: () => [
           require('autoprefixer') (
            {
              overrideBrowserslist: ['last 2 version', '>1%', 'ios 7']
             }
         )
       ]
  }
}

plugins

  • VueLoaderPlugin (vue-loader/lib/plugin)(解析.vue文件与vue-loader配合使用)
  • HtmlWebapckPlugin(html-webpack-plugin)(非常强的html插件)
new HtmlWebpackPlugin({ // 打包输出HTML
    title: 'Hello World',
    minify: { // 压缩HTML文件
       removeComments: true, // 移除HTML中的注释
       collapseWhitespace: true, // 删除空白符与换行符
       minifyCSS: true// 压缩内联css
    },
    chunks: ['main'], // 入口js
    filename: 'index.html', // 文件名称
    template: path.join(__dirname, '../src/pages/index.html'), // 文件地址
  }),
  • OptimizeCssAssetsWebpackPlugin(optimize-css-assets-webpack-plugin)// 压缩css,根据cssnano规则进行压缩
new OptimizeCssAssetsWebpackPlugin({
  assetNameRegExp: /.css$/g,
  cssProcessor: require('cssnano')
}),
  • MiniCssExtractPlugin (mini-css-extract-plugin) // 把css拆分单个css文件
new MiniCssExtractPlugin({
   filename: '[name].css'
})
  • CleanWebpackPlugin(const { CleanWebpackPlugin } = require('clean-webpack-plugin')) // 清理文件夹

js压缩

  • UglifyJsPlugin (uglifyjs-webpack-plugin) // js的代码压缩
    注意:webpack4.X当mode为production时默认开启
optimization: {
    minimizer: [
      new UglifyJsPlugin({
        test: /\.js(\?.*)?$/i,  //测试匹配文件,
        include: /\/includes/, //包含哪些文件
        excluce: /\/excludes/, //不包含哪些文件

        //允许过滤哪些块应该被uglified(默认情况下,所有块都是uglified)。 
        //返回true以uglify块,否则返回false。
        chunkFilter: (chunk) => {
            // `vendor` 模块不压缩
            if (chunk.name === 'vendor') {
              return false;
            }
            return true;
          }
        }),
  
        cache: false,   //是否启用文件缓存,默认缓存在node_modules/.cache/uglifyjs-webpack-plugin.目录
        parallel: true,  //使用多进程并行运行来提高构建速度
    ],
  }

文件指纹

  • Hash (和整个项目的构建相关,只要项目文件有修改,整个项目构建的hash值就会改变)
  • Chunkhahs (和webpack打包的chunk有关,不同的entry会产生不同的chunkhash值)
  • Contenthash(根据文件内容来定义hash,文件内容不变,则contenthash不变)
module.exports = {
  output: {
    // 入口文件多用于chunkhash
    filename: '[name][chunkhash:8].js',
  },
module: {
  rules: [
    {
        test: /.(png|jpe?g|svg|gif)$/,
        use: [
          {
            loader: 'file-loader',
            options: {
              name: 'img/[name][hash:8].[ext]'
            }
          }
        ]
     }
  ]
},
plugins: [
  new MiniCssExtractPlugin({
     // css多用于contenthash,必须采用此插件,才会生成独立文件
     filename: '[name][contenthash].css'
  })
]
}

你可能感兴趣的:(webpack的基础配置)