<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      webpack生產環境優化:緩存

      轉載請注明 來源:http://www.eword.name/
      Author:eword
      Email:eword@eword.name

      webpack生產環境優化:緩存

      生產環境的緩存主要分為:babel緩存和文件資源緩存。

      一、babel緩存配置

      • babel緩存
        • 目標:讓第二次打包構建速度更快。
        • 在babel-loader配置中添加緩存配置:cacheDirectory: true
      /*
          webpack.config.js webpack的配置文件
          路徑: ./webpack.config.js
          在babel-loader配置中添加緩存配置:`cacheDirectory: true`
      */
      
      ……
      
      /*
           js兼容性處理:babel-loader @babel/core @babel/preset-env
           1.基本js兼容性處理 @babel/preset-env
           問題:只能轉換基本語法,如promise不能轉換 
           2.全部js兼容性處理 --> @babel/polvfill
           問題:我只要解決部分兼容性問題,但是將所有兼容性代碼全部引入,體積太大了~ 
           3. 需要做兼容性處理的就做:按需加載 --> core-js
           */
      {
          test: /\.(?:js|mjs|cjs)$/,
          // 指定檢查的目錄,或者配置排除某些文件夾
          // include: [path.resolve(__dirname, 'src')], 
          // 注意:只檢查自己寫的源代碼,第三方的庫是不用檢查的,這里排除node_modules文件夾
          loader: "babel-loader",
          exclude: /node_modules/,
          options: {
              // 預設:指示 babel 做怎么樣的兼容性處理
              "presets": [
                  [
                      "@babel/preset-env",
                      {
                          // 按需加載
                          useBuiltIns: 'usage',
                          // 制定 core-js 版本
                          corejs: {
                              version: 3
                          },
                          //指定兼容性做到哪個版本的瀏覽器
                          targets: {
                              chrome: '60',
                              firefox: '60',
                              ie: '9',
                              safari: '10',
                              edge: '17'
                          }
                      }
                  ]
              ],
              // 開啟babel緩存
              //第二次構建時,會讀取之前的緩存
              cacheDirectory: true
          }
      },
      
      ……
      
      

      核心配置

      // 開啟babel緩存
      //第二次構建時,會讀取之前的緩存
      cacheDirectory: true
      

      二、文件資源緩存

      • 文件資源緩存
        • 目標: 讓代碼上線運行緩存更好使用
        • 在生成的js和css文件名上添加hash值,生成的hash值有以下幾種:
          • hash:每次wepack構建時會生成一個唯一的hash值。
            • 問題:因為js和css同時使用一個hash值。如果重新打包,會導致所有緩存失效。(可能我卻只改動一個文件)
          • chunkhash:根據chunk生成的hash值。
            • 問題:js和css的hash值還是一樣的。
            • 原因:如果打包來源于同一個chunk,那么hash值就一樣。而css是在js中被引入的,所以同屬于一個chunk。
          • contenthash:根據文件的內容生成hash值。不同文件hash值一定不一樣。
      /*
          webpack.config.js webpack的配置文件
          路徑: ./webpack.config.js
      */
      
          ……
          
      module.exports = {
          // webpack配置
          // 入口起點文件
          entry: './src/js/index.js',
          // 輸出
          output: {
              // 輸出文件名
              filename: 'js/built.[contenthash:10].js',
              // 輸出路徑
              // __dirname nodejs的變量,代表當前文件的目錄絕對路徑
              path: resolve(__dirname, 'build'),
          },
          // loader的配置
          module: {
              rules: [
      
                  // 詳細loader配置
                  //不同文件必須配置不同loader處理
                  ……
              ],
          },
          // plugins的配置
          plugins: [
              // 詳細的plugins配置
              ……
              new MiniCssExtractPlugin({
                  //對輸出的css文件進行重命名,這里單獨為生成的 css 創建一個 css 文件夾。
                  filename: './css/[contenthash:10].css',
                  ignoreOrder: false,
                  linkType: "text/css",
              }),
              ……
          ],
          // 模式  development  開發環境,production 生產環境
          // mode: 'development',
          // 生產環境下會自動壓縮js代碼
          mode: 'production',
      
          // 開發服務器devServer:用來自動化(自動編譯, 自動打開瀏覽器, 自動刷新瀏覽器)
          // 特點:只會在內存中編譯打包,不會有任何輸出
          // 啟動devServer指令為: npx webpack-dev-server
          devServer: {
              ……
          },
      };
      
      

      核心配置

         ……
         // 在 output配置文件輸出是添加.[contenthash:10]配置,
         // 實現在生成的文件名中加入 10位hash哈西值。
         // 如果文件內容沒有變化,那么 contenthash 不會變化。
         
          output: {
              // 輸出文件名
              filename: 'js/built.[contenthash:10].js',
              // 輸出路徑
              // __dirname nodejs的變量,代表當前文件的目錄絕對路徑
              path: resolve(__dirname, 'build'),
          },
          
          ……
      
      
              ……
       
      // 在 plugins中的MiniCssExtractPlugin插件的filename配置中添加[contenthash:10]配置,
      // 實現在生成的文件名中加入 10位hash哈西值。
      // 如果文件內容沒有變化,那么 contenthash 不會變化。
         
         
          // plugins的配置
          plugins: [
              // 詳細的plugins配置
              ……
              new MiniCssExtractPlugin({
                  //對輸出的css文件進行重命名,這里單獨為生成的 css 創建一個 css 文件夾。
                  filename: './css/[contenthash:10].css',
                  ignoreOrder: false,
                  linkType: "text/css",
              }),
              
              ……
              
          ],
          
           ……
            
      

      三、緩存測試

      3.1、搭建測試服務器

      使用express搭建測試服務器

      // server.js 文件
      // 服務器代碼
      // express搭建服務器
      const express = require('express');
      // app 中間件 use 暴露服務器
      // maxAge: 1000 * 3600 有效期 1 小時
      const app = express();
      app.use(express.static('build', { maxAge: 1000 * 3600 }));
      // 啟動監聽端口
      app.listen(3000);
      
      • 啟動服務器指令:
        • 方式一:使用nodemon啟動,需要安裝nodemon包
          • npm i nodemon -g
          • nodemon server.js
        • 方式二:使用 node ,無需額外安裝包
          • node server.js
      • 訪問服務器地址:http://localhost:3000/

      3.2、執行測試服務器

      # 先打包構建
      > npx webpack
      # 再啟動服務器
      > node server.js
      

      服務器啟動后,如果要測試代碼改動,可以再啟動一個終端直接重新打包構建,無需重啟服務器,直接刷新瀏覽器即可。

      3.3、查看緩存配置是否生效

      瀏覽器訪問:http://localhost:3000/

      打開調試工具查看

      打開調試工具查看Cache-Control信息

      四、工程文件路徑

      .
      ├── build       ## 打包后的js和css文件名稱后面都加上了10位hash值。
      │   ├── css
      │   │   ├── 1.8f2f5b58a1.css
      │   │   └── 2.c6c6c3a2a2.css
      │   ├── imgs
      │   │   └── ae7bf15c0d.jpg
      │   ├── index.html
      │   ├── js
      │   │   ├── 1.built.c15a5dbe89.js
      │   │   ├── 1.built.c15a5dbe89.js.map
      │   │   ├── 2.built.1605e46a5d.js
      │   │   ├── 2.built.1605e46a5d.js.map
      │   │   ├── built.f675d9b9a1.js
      │   │   └── built.f675d9b9a1.js.map
      │   └── media
      │       └── cffec944b5. ttf
      ├── server.js                   ## 服務器文件
      ├── src
      │   ├── css
      │   │   ├── iconfont.css
      │   │   ├── index.css
      │   │   └── index.less
      │   ├── imgs
      │   │   ├── img.jpg
      │   │   ├── img1.jpg
      │   │   ├── img2.jpg
      │   │   └── img3.jpg
      │   ├── index.html
      │   ├── js
      │   │   ├── iconfont.js
      │   │   └── index.js
      │   └── media
      │       ├── iconfont.json
      │       └── iconfont.ttf
      └── webpack.config.js
      
      posted @ 2023-08-21 00:12  Eword  閱讀(297)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成人国产精品日本在线观看 | 午夜成人精品福利网站在线观看 | 国产高清在线不卡一区| 蜜桃av无码免费看永久| 国产精品户外野外| 国产va免费精品观看| 国产成AV人片在线观看天堂无码| 化德县| 国产午夜精品福利免费看| 九九热在线观看视频精品| 蜜芽久久人人超碰爱香蕉| 久久天天躁夜夜躁狠狠85| 亚洲特黄色片一区二区三区| 国产精品99久久免费| 国产亚洲精品岁国产精品| 国产国产午夜福利视频| 亚洲电影在线观看| 亚洲 欧美 中文 日韩aⅴ| 宫西光有码视频中文字幕| 久久久精品波多野结衣av | 亚洲精品乱码久久观看网| 久99久热只有精品国产99| 最近中文字幕国产精选| 国产一区精品综亚洲av| 亚洲日韩久久综合中文字幕| 99久久婷婷国产综合精品青草漫画| 国产精品爽爽久久久久久竹菊| 国产成人午夜福利院| 亚洲欧洲日产国产av无码| 亚洲色大成网站WWW永久麻豆| 精品一区二区成人码动漫| 少妇粉嫩小泬喷水视频www| 国产国产久热这里只有精品| 亚洲国产天堂久久综合226114| 亚洲另类丝袜综合网| 国厂精品114福利电影免费| 亚洲国产成人一区二区在线| 天天做天天爱夜夜爽毛片| 男女做爰真人视频直播| 国产情侣激情在线对白| 视频一区视频二区卡通动漫 |