webpack5-生產(chǎn)環(huán)境配置

const { resolve } = require('path')

const MiniCssExtractPlugin = require('mini-css-extract-plugin')

const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')

const HtmlWebpackPlugin = require('html-webpack-plugin')

const commonCssLoader = [

? ? MiniCssExtractPlugin.loader,?

? ? 'css-loader', {

? ? ? ? // 還需在package.json中定義browserlist

? ? ? ? loader: 'postcss-loader',

? ? ? ? options: {

? ? ? ? ? ? ident: 'postcss',

? ? ? ? ? ? plugins: () => [require('postcss-preset-env')]

? ? ? ? }

? ? }

]

module.exports = {

? ? // html文件:默認(rèn)不能使用HMR功能.同時(shí)導(dǎo)致問(wèn)題:html文件不能熱更新?。?!

? ? // 解決:entry入口修改,將html引入后它的HMR生效(默認(rèn)不添加 HMR)

? ? entry: ['./src/js/index.js', './src/index.html'],

? ? output: {

? ? ? ? filename: 'js/built.js',

? ? ? ? path: resolve(__dirname, 'build')

? ? },

? ? module: {

? ? ? ? rules: [

? ? ? ? ? ? // loader配置 less/css資源

? ? ? ? ? ? {

? ? ? ? ? ? ? ? test: /\.css$/,

? ? ? ? ? ? ? ? use: [...commonCssLoader]

? ? ? ? ? ? },

? ? ? ? ? ? {

? ? ? ? ? ? ? ? test: /\.less$/,

? ? ? ? ? ? ? ? use: [...commonCssLoader, 'less-loader']

? ? ? ? ? ? },

? ? ? ? ? ? // 處理js資源 在package.json中eslintConfig --》airbnb

? ? ? ? ? ? // 正常一個(gè)文件只能被一個(gè)loader處理:

? ? ? ? ? ? // 當(dāng)一個(gè)文件被多個(gè)laoder處理要設(shè)置先后順序enforce參數(shù)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? test: /\.js$/,

? ? ? ? ? ? ? ? exclude: /node_modules/, // 不包含文件

? ? ? ? ? ? ? ? loader: 'eslint-loader',

? ? ? ? ? ? ? ? enforce: 'pre', // 優(yōu)先執(zhí)行eslint-loader處理文件

? ? ? ? ? ? ? ? options: {

? ? ? ? ? ? ? ? ? ? fix: true,

? ? ? ? ? ? ? ? }

? ? ? ? ? ? },

? ? ? ? ? ? {

? ? ? ? ? ? ? ? test: /\.js$/,

? ? ? ? ? ? ? ? exclude: /node_modules/, // 不包含文件

? ? ? ? ? ? ? ? loader: 'babel-loader',

? ? ? ? ? ? ? ? options: {

? ? ? ? ? ? ? ? ? ? presets: [

? ? ? ? ? ? ? ? ? ? ? ? ['@babel/preset-env',

? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? useBuiltIns: 'usage',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? corejs: { version: 3 },

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? targets: {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? chrome: '60',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? firefox: '50'

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? }]

? ? ? ? ? ? ? ? ? ? ]

? ? ? ? ? ? ? ? }

? ? ? ? ? ? },

? ? ? ? ? ? // 處理圖片資源

? ? ? ? ? ? {

? ? ? ? ? ? ? ? test: /\.(jpg|png|gif)/,

? ? ? ? ? ? ? ? loader: 'url-loader',

? ? ? ? ? ? ? ? options: {

? ? ? ? ? ? ? ? ? ? limit: 8 * 1024,

? ? ? ? ? ? ? ? ? ? name: '[hash:10].[ext]',

? ? ? ? ? ? ? ? ? ? outputPath: 'imgs',

? ? ? ? ? ? ? ? ? ? esModule: false

? ? ? ? ? ? ? ? }

? ? ? ? ? ? },

? ? ? ? ? ? // 處理html中的圖片(所以處理html文件中圖片)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? test: /\.html$/,

? ? ? ? ? ? ? ? loader: 'html-loader' // 專(zhuān)門(mén)處理html中圖片(依賴(lài)的commonjs 處理圖片的url-loader需設(shè)置esModule:false)

? ? ? ? ? ? },

? ? ? ? ? ? // 打包排除的其他文件(音視頻之類(lèi)的)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? exclude: /\.(js|css|less|html|jpg|png|gif)/,

? ? ? ? ? ? ? ? laoder: 'file-loader',

? ? ? ? ? ? ? ? options: {

? ? ? ? ? ? ? ? ? ? outputPath: 'media'

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ]

? ? },

? ? plugins: [

? ? ? ? new MiniCssExtractPlugin({

? ? ? ? ? ? filename: 'css/built.css'

? ? ? ? }),

? ? ? ? new OptimizeCssAssetsWebpackPlugin(),

? ? ? ? // 處理html資源( 無(wú)法處理html中的圖片處理)

? ? ? ? new HtmlWebpackPlugin({

? ? ? ? ? ? template: './src/index.html',

? ? ? ? ? ? //壓縮(去空格、注釋等)

? ? ? ? ? ? minify: {

? ? ? ? ? ? ? ? collapseWhitespace: true,

? ? ? ? ? ? ? ? removeComments: true

? ? ? ? ? ? }

? ? ? ? })

? ? ],

? ? mode: process.env.NODE_ENV // production環(huán)境下js自動(dòng)壓縮的

}


/** devtool:source-map 一種提供源代碼到構(gòu)建后的代碼映射技術(shù)(如果構(gòu)建后報(bào)錯(cuò),通過(guò)映射可以追蹤源代碼)

* [inline-|hidden-|eval-][nosources-][cheap-[module-]]]source-map

*

* // 提示錯(cuò)誤代碼準(zhǔn)確信息 和 源代碼錯(cuò)誤位置

* source-map

* inline-source-map 內(nèi)聯(lián) 構(gòu)建速度快 不生成文件

*

* // 錯(cuò)誤代碼錯(cuò)誤原因 無(wú)法追蹤源代碼文件

* hidden-source-map 外部 生成文件xxx.map

*

* // 錯(cuò)誤代碼錯(cuò)誤原因 無(wú)法追蹤源代碼文件

* eval-source-map 內(nèi)聯(lián)? 每個(gè)文件都生產(chǎn)對(duì)應(yīng)的sourceMap文件

*

* // 錯(cuò)誤代碼錯(cuò)誤原因 無(wú)源代碼錯(cuò)誤提示

* nosources-source-map 外部

*

* cheap-source-map 外部

*

* cheap-module-source-map 外部

*

* 內(nèi)聯(lián):不生成sourceMap文件 構(gòu)建速度快

* 內(nèi)聯(lián):生成sourceMap文件

*/

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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