webpack的基礎(chǔ)配置

webpack 基礎(chǔ)

  • 主要講述的是webapack的常用方法與項(xiàng)目中遇見的常見問題,自己搭建webpack配置,根據(jù)項(xiàng)目的情況進(jìn)行配置。

webpack.config.js

webpack默認(rèn)的基礎(chǔ)配置入口,真正的項(xiàng)目會(huì)根據(jù)開發(fā)環(huán)境自定義不同的入口


  • npm init -y (初始化page.json,依賴包的管理)
  • webpack webpack-cli(webpack的依賴環(huán)境)
  • @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可以設(shè)置圖片的參數(shù)base64打包)
  • mini-css-extract-plugin (拆分獨(dú)立css,與style-loader沖突,用MiniCssExtractPlugin.loader代替)
  • postcss-loader (css解析成AST,配合autoprefixer實(shí)現(xiàn)css的補(bǔ)全能,支持不同瀏覽器的配置)
  • @babel/plugin-syntax-dynamic-import 動(dòng)態(tài)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)(非常強(qiáng)的html插件)
new HtmlWebpackPlugin({ // 打包輸出HTML
    title: 'Hello World',
    minify: { // 壓縮HTML文件
       removeComments: true, // 移除HTML中的注釋
       collapseWhitespace: true, // 刪除空白符與換行符
       minifyCSS: true// 壓縮內(nèi)聯(lián)css
    },
    chunks: ['main'], // 入口js
    filename: 'index.html', // 文件名稱
    template: path.join(__dirname, '../src/pages/index.html'), // 文件地址
  }),
  • OptimizeCssAssetsWebpackPlugin(optimize-css-assets-webpack-plugin)// 壓縮css,根據(jù)cssnano規(guī)則進(jìn)行壓縮
new OptimizeCssAssetsWebpackPlugin({
  assetNameRegExp: /.css$/g,
  cssProcessor: require('cssnano')
}),
  • MiniCssExtractPlugin (mini-css-extract-plugin) // 把css拆分單個(gè)css文件
new MiniCssExtractPlugin({
   filename: '[name].css'
})
  • CleanWebpackPlugin(const { CleanWebpackPlugin } = require('clean-webpack-plugin')) // 清理文件夾

js壓縮

  • UglifyJsPlugin (uglifyjs-webpack-plugin) // js的代碼壓縮
    注意:webpack4.X當(dāng)mode為production時(shí)默認(rèn)開啟
optimization: {
    minimizer: [
      new UglifyJsPlugin({
        test: /\.js(\?.*)?$/i,  //測(cè)試匹配文件,
        include: /\/includes/, //包含哪些文件
        excluce: /\/excludes/, //不包含哪些文件

        //允許過濾哪些塊應(yīng)該被uglified(默認(rèn)情況下,所有塊都是uglified)。 
        //返回true以u(píng)glify塊,否則返回false。
        chunkFilter: (chunk) => {
            // `vendor` 模塊不壓縮
            if (chunk.name === 'vendor') {
              return false;
            }
            return true;
          }
        }),
  
        cache: false,   //是否啟用文件緩存,默認(rèn)緩存在node_modules/.cache/uglifyjs-webpack-plugin.目錄
        parallel: true,  //使用多進(jìn)程并行運(yùn)行來提高構(gòu)建速度
    ],
  }

文件指紋

  • Hash (和整個(gè)項(xiàng)目的構(gòu)建相關(guān),只要項(xiàng)目文件有修改,整個(gè)項(xiàng)目構(gòu)建的hash值就會(huì)改變)
  • Chunkhahs (和webpack打包的chunk有關(guān),不同的entry會(huì)產(chǎn)生不同的chunkhash值)
  • Contenthash(根據(jù)文件內(nèi)容來定義hash,文件內(nèi)容不變,則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,必須采用此插件,才會(huì)生成獨(dú)立文件
     filename: '[name][contenthash].css'
  })
]
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • webpack 是一個(gè)流行的前端項(xiàng)目構(gòu)建工具(打包工具),可以解決當(dāng)前 web 開發(fā)中所面臨的困境。webpack...
    A_si閱讀 731評(píng)論 0 0
  • 寫在開頭 先說說為什么要寫這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,442評(píng)論 4 31
  • 記得2004年的時(shí)候,互聯(lián)網(wǎng)開發(fā)就是做網(wǎng)頁(yè),那時(shí)也沒有前端和后端的區(qū)分,有時(shí)一個(gè)網(wǎng)站就是一些純靜態(tài)的html,通過...
    陽陽陽一堆陽閱讀 3,455評(píng)論 0 5
  • 第一步:安裝webpack,在命令行輸入npm install -g webpack webpack-cli 新建...
    二汪汪閱讀 972評(píng)論 0 0
  • 夜深睡不著,打開抽屜,翻出了久遠(yuǎn)的高中畢業(yè)照。 照片還是很新,在一堆書的保護(hù)下沒有沾染到一點(diǎn)灰塵,照片上的笑容,依...
    香榭落葉閱讀 160評(píng)論 0 0

友情鏈接更多精彩內(nèi)容