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

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

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

      webpack的js兼容性處理

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

      webpack的js兼容性處理

      js兼容性檢查主要用到的 loader
      babel-loader@8.3.0
      @babel/core@7.14.6
      @babel/preset-env@7.14.7 基本語法兼容性處理
      @babel/polyfill@7.12.1 全部js兼容性處理,缺點是無法按需加載兼容函數,而是全量加載,打包的 js 文件很大,
      core-js@3.32.1 全部js兼容性處理,可以按需加載兼容函數

      兼容性處理的原理是打包后的 js 文件中會將不兼容的 js 函數、格式、命名規則等轉換為可以多瀏覽器兼容的 js 代碼。

      一、最終配置示例

      /*
          webpack.config.js webpack的配置文件
          路徑: ./webpack.config.js
      */
      
      // resolve用來拼接絕對路徑的方法
      const { resolve } = require('path');
      // 引入打包 html 文件的插件 html-webpack-plugin
      const HtmlWebpackPlugin = require('html-webpack-plugin');
      
      module.exports = {
          // webpack配置
          // 入口起點文件
          entry: './src/js/index.js',
          // 輸出
          output: {
              // 輸出文件名
              filename: 'js/built.js',
              // 輸出路徑
              // __dirname nodejs的變量,代表當前文件的目錄絕對路徑
              path: resolve(__dirname, 'build'),
          },
          // loader的配置
          module: {
              rules: [
                  // 詳細loader配置
                  //不同文件必須配置不同loader處理
      
                  /*
                       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'
                                      }
                                  }
                              ]
                          ]
                      }
                  },
              ],
          },
          // plugins的配置
          plugins: [
              // 詳細的plugins配置
              // html-webpack-plugin
              // 功能:默認會創建一個空的HTML, 自動引入打包輸出的所有資源(JS/CSS)
              // 需求:需要有結構的HTML文件
              new HtmlWebpackPlugin({
                  // 復制../src/index.html'文件,并自動引入打包輸出的所有資源(JS/CS5)
                  template: './src/index.html',
              }),
          ],
          // 模式  development  開發環境,production 生產環境
          mode: 'development',
          // 生產環境下會自動壓縮js代碼
          // mode: 'production'
      };
      
      

      三、全部js兼容性處理,全量加載兼容函數時的 index.js 文件和webpack配置

      /*
         使用全量加載兼容函數的形式時的index.js
          路徑: ./js/index.js
      */
      
      // 全量加載無需修改 webpack的配置文件,
      // 僅需要在入口 index.js 中引入 '@babel/polyfill',并安裝@babel/preset-env  包
      import '@babel/polyfill'
      
      const add = (x, y) => {
        return x + y;
      }
      
      console.log(add(2, 3));
      
      
      const promise = new Promise((resolve) => {
        setTimeout(() => {
          console.log('定時器被執行……')
          resolve();
        }, 1000)
      })
      
      console.log(promise);
      
      /*
          webpack.config.js webpack的配置文件
          路徑: ./webpack.config.js
      */
      
      ……
      module.exports = {
      ……
          module: {
              rules: [
                  // 詳細loader配置
                  //不同文件必須配置不同loader處理
      
                  /*
                       js兼容性處理:babel-loader @babel/core @babel/preset-env
                       1.基本js兼容性處理 @babel/preset-env
                       問題:只能轉換基本語法,如promise不能轉換 
                       2.全部js兼容性處理 --> @babel/polvfill
                       問題:我只要解決部分兼容性問題,但是將所有兼容性代碼全部引入,體積太大了~ 
                       */
                  {
                      test: /\.(?:js|mjs|cjs)$/,
                      // 指定檢查的目錄,或者配置排除某些文件夾
                      // include: [path.resolve(__dirname, 'src')], 
                      // 注意:只檢查自己寫的源代碼,第三方的庫是不用檢查的,這里排除node_modules文件夾
                      loader: "babel-loader",
                      exclude: /node_modules/,
                      options: {
                          // 預設:指示 babel 做怎么樣的兼容性處理
                          "presets": [ "@babel/preset-env", ]
                      }
                  },
              ],
          },
          // plugins的配置
          plugins: [
      ……
          ],
          // 模式  development  開發環境,production 生產環境
          mode: 'development',
          // 生產環境下會自動壓縮js代碼
          // mode: 'production'
      };
      
      

      四、全部js兼容性處理,按需加載兼容函數時的 index.js 文件和webpack配置

      /*
         使用按需加載兼容函數的形式時的index.js
          路徑: ./js/index.js
      */
      
      const add = (x, y) => {
        return x + y;
      }
      
      console.log(add(2, 3));
      
      
      const promise = new Promise((resolve) => {
        setTimeout(() => {
          console.log('定時器被執行……')
          resolve();
        }, 1000)
      })
      
      console.log(promise);
      
      /*
          webpack.config.js webpack的配置文件
          路徑: ./webpack.config.js
      */
      
      ……
      module.exports = {
      ……
          // loader的配置
          module: {
              rules: [
                  // 詳細loader配置
                  //不同文件必須配置不同loader處理
      
                  /*
                       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'
                                      }
                                  }
                              ]
                          ]
                      }
                  },
              ],
          },
          // plugins的配置
          plugins: [
      ……
          ],
          // 模式  development  開發環境,production 生產環境
          mode: 'development',
          // 生產環境下會自動壓縮js代碼
          // mode: 'production'
      };
      
      

      五、安裝需要loader

      # 安裝需要的loader
      > npm i babel-loader@8.3.0  @babel/core@7.14.6 @babel/preset-env@7.14.7 core-js@3.32.1 -D
      

      六、運行

      > npx webpack
      
      posted @ 2023-08-21 00:05  Eword  閱讀(72)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 动漫av网站免费观看| AV秘 无码一区二| 国产精品v片在线观看不卡| 亚洲色成人网站www永久四虎| 亚洲精品久久久久久无码色欲四季| 国产偷国产偷亚洲高清日韩| 真实国产老熟女无套中出| 婷婷五月综合激情| 极品无码国模国产在线观看| 国产极品美女网站在线观看| 亚洲国产成人AⅤ片在线观看| 少妇尿尿一区二区在线免费| 人成午夜大片免费视频77777| 在线观看国产成人av片| 中文字幕国产精品日韩| 亚洲精品熟女一区二区| 在线看片免费人成视频久网| 国产婷婷综合在线视频| 一日本道伊人久久综合影| 高清无码爆乳潮喷在线观看| 宁蒗| 人妻加勒比系列无码专区| 婷婷四虎东京热无码群交双飞视频| 一区二区中文字幕久久| 天堂网在线.www天堂在线资源| 亚洲av日韩av综合在线观看| 天堂中文最新版在线官网在线| 日日碰狠狠添天天爽不卡| 亚洲国产欧美一区二区好看电影| 中文字幕av日韩有码| 最新国产精品拍自在线播放| 亚洲日韩久热中文字幕| 精品精品亚洲高清a毛片| 窝窝午夜色视频国产精品破| 亚洲精品日韩中文字幕| 亚洲成a人无码av波多野| 99久久国产一区二区三区| 人人澡人人妻人人爽人人蜜桃| 国产精品无码av在线一区| 日韩在线视频线观看一区| 天堂v亚洲国产v第一次|