webpack優(yōu)化

webpack.config 按照production和dev分開配置颅崩,
wepback.base.config.js

npm install webpack-merge -D

const path = require("path");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
module.exports = {
entry: {
  index: "./src/index.js",
},
output: {
  path: path.resolve(__dirname, "./dist"),
  filename: "[name]-[hash:6].js",
},
module: {
  rules: [
    {
      test: /\.(png|jpe?g|gif)$/,
      use: {
        loader: "url-loader",
        options: {
          name: "[name].[ext]",
          outputPath: "images",
          limit: 1024 * 3, //3kb
        },
      },
    },
    {
      test: /\.(eot|woff|woff2)$/,
      use: "file-loader",
    },
    {
      test: /\.js$/,
      use: {
        loader: "babel-loader",
      },
    },
  ],
},

plugins: [new CleanWebpackPlugin()],
};


webpack.dev.config.js

//webpack內置插件
const { HotModuleReplacementPlugin } = require("webpack");
const htmlWebpackPlugin = require("html-webpack-plugin");

const { merge } = require("webpack-merge");
const baseConfig = require("./webpack.base.config.js");

const devConfig = {
  mode: "development",
  module: {
    rules: [
      {
        test: /\.less$/,
        use: ["style-loader", "css-loader", "postcss-loader", "less-loader"],
      },
    ],
  },
  devtool: "inline-source-map",
  devServer: {
    contentBase: "./dist",
    open: true,
    hot: true,
    hotOnly: true,
    port: 8081,
    proxy: {
      "/api": {
        target: "http://localhost:9092",
      },
    },
  },
  plugins: [
    new htmlWebpackPlugin({
      template: "./src/index.html",
      filename: "index.html",
    }),
    new HotModuleReplacementPlugin(),
  ],
};
// module.exports = (env) => {
//   //
//   if(porcess.env.NODE_ENV==='env'){
//     return merge(baseConfig,devConfig)
//   }else{
//     return merge(baseConfig,prodConfig)
//   }
// };
module.exports = merge(baseConfig, devConfig);

webpack.prod.config.js

const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const htmlWebpackPlugin = require("html-webpack-plugin");
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const path = require("path");
const { merge } = require("webpack-merge");
const baseConfig = require("./webpack.base.config.js");

const PurifyCSS = require("purifycss-webpack");
const glob = require("glob-all");

const prodConfig = {
  mode: "production",
  module: {
    rules: [
      {
        test: /\.less$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader,
            options: {
              publicPath: "../",
            },
          },
          "css-loader",
          "postcss-loader",
          "less-loader",
        ],
      },
    ],
  },
  optimization: {
    usedExports: true,
  },
  plugins: [
    new htmlWebpackPlugin({
      template: "./src/index.html",
      filename: "index.html",
      minify: {
        // 壓縮HTML文件
        removeComments: true, // 移除HTML中的注釋
        collapseWhitespace: true, // 刪除空白符與換行符
        minifyCSS: true, // 壓縮內聯(lián)css
      },
    }),
    new MiniCssExtractPlugin({
      filename: "css/[name]-[contenthash:6].css",
    }),
    new OptimizeCSSAssetsPlugin({
      cssProcessor: require("cssnano"), // 這里制定了引擎击狮,不指定默認也是 cssnano
    }),
    new PurifyCSS({
      paths: glob.sync([
        // 要做 CSS Tree Shaking 的路徑文件
        path.resolve(__dirname, "./src/*.html"), // 請注意话侧,我們同樣需要對 html 文件進行 tree shaking
        path.resolve(__dirname, "./src/*.js"),
      ]),
    }),
  ],
};

module.exports = merge(baseConfig, prodConfig);

附加配置文件
postcss.config.js

module.exports = {
  plugins: [
    require("autoprefixer")({
      overrideBrowserslist: ["last 2 versions", ">1%"],
    }),
    // require("cssnano"),
  ],
};
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末栗精,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子瞻鹏,更是在濱河造成了極大的恐慌悲立,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件新博,死亡現場離奇詭異薪夕,居然都是意外死亡,警方通過查閱死者的電腦和手機赫悄,發(fā)現死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門原献,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馏慨,“玉大人,你說我怎么就攤上這事姑隅⌒戳ィ” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵讲仰,是天一觀的道長慕趴。 經常有香客問我,道長鄙陡,這世上最難降的妖魔是什么冕房? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮趁矾,結果婚禮上耙册,老公的妹妹穿的比我還像新娘。我一直安慰自己愈魏,他們只是感情好觅玻,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著培漏,像睡著了一般溪厘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牌柄,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天畸悬,我揣著相機與錄音,去河邊找鬼珊佣。 笑死蹋宦,一個胖子當著我的面吹牛,可吹牛的內容都是我干的咒锻。 我是一名探鬼主播冷冗,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惑艇!你這毒婦竟也來了蒿辙?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤滨巴,失蹤者是張志新(化名)和其女友劉穎思灌,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體恭取,經...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡泰偿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了蜈垮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耗跛。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡裕照,死狀恐怖,靈堂內的尸體忽然破棺而出课兄,到底是詐尸還是另有隱情牍氛,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布烟阐,位于F島的核電站搬俊,受9級特大地震影響,放射性物質發(fā)生泄漏蜒茄。R本人自食惡果不足惜唉擂,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望檀葛。 院中可真熱鬧玩祟,春花似錦、人聲如沸屿聋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽润讥。三九已至转锈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間楚殿,已是汗流浹背撮慨。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脆粥,地道東北人砌溺。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像变隔,于是被迫代替她去往敵國和親规伐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容