<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:26  影烏  閱讀(268)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲色一区二区三区四区| 2018年亚洲欧美在线v| av在线播放国产一区| 亚洲国产一区二区三区最新| 在线 欧美 中文 亚洲 精品| 亚洲国产成人精品av区按摩| 国产高清在线男人的天堂 | 综合偷自拍亚洲乱中文字幕| 中国大陆高清aⅴ毛片| 国产av综合色高清自拍| 国产av午夜精品福利| 亚洲男女羞羞无遮挡久久丫| 大色综合色综合网站| 亚洲欧洲日产国码AV天堂偷窥| 国产亚洲精品AA片在线爽| 熟妇人妻中文a∨无码| 亚洲成人动漫在线| 中文字幕国产精品二区| 中文字幕亚洲精品乱码| 少妇人妻真实偷人精品| 无套内射极品少妇chinese| 久久自己只精产国品| 人妻中文字幕精品一页| 久久99精品国产99久久6尤物| 亚洲国产成人久久77| 国产裸体无遮挡免费精品| A级毛片无码久久精品免费| 福利一区二区视频在线| 国产成人av三级在线观看| 亚洲精品美女久久久久9999| 一区二区中文字幕av| 久久中文字幕日韩无码视频| 亚洲国产在一区二区三区| 桃园市| 日韩国产精品无码一区二区三区| 国产午夜福利免费入口| 无码精品国产va在线观看dvd | 中文字幕乱码十国产乱码| 中文字幕久区久久中文字幕| 亚洲欧洲日产国码高潮αv| 少妇办公室好紧好爽再浪一点|