美文网首页
webpack的基础配置

webpack的基础配置

作者: 刘彪lastbee | 来源:发表于2019-09-26 14:18 被阅读0次

    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的基础配置

          本文链接:https://www.haomeiwen.com/subject/mddructx.html