webpack+vite前端構建工具 - 3webpack處理js

3 webpack處理js

  • webpack的核心——處理js文件,將模塊化的代碼打包。
  • 具體操作如下
    • es6轉化(為兼容老瀏覽器,將es6轉化為es5)
      • babel-loader
    • 代碼規范(例如空格,縮進等代碼風格規范)
      • eslint
    • 代碼分割和打包(webpack本職工作)
      • webpack的自身核心功能

3.1 es6轉化——babel-loader

定義編譯配置(options或.babelrc)。

3.1.1 babel-loader寫入webpack配置

1 安裝babel-loader

step1 安裝babel-loader

  • babel-loader只是接口,本身不做編譯工作(編譯使用@babel/core包),因此要安裝2個包——babel-loader & @babel/core
  • 命令:npm install babel-loader @babel/core --save-dev

–save, 作為開發依賴安裝(編譯步驟是開發階段完成的)

loader作用: 定義對某種類型文件的處理方案

2 配置babel-loader

step2 配置babel-loader
loader和use是兩個配置方式,對應3種配置方法。

// webpack.config.js
module.exports = {// loadermodule: {rules: [{// 每個對象是一個loadertest: /\.js$/,loader: "babel-loader", // 寫法1// use: ["babel-loader", "xxx-loader"],// 寫法2 按照數組順序依次使用loader處理文件// use: { // 寫法3 loader配置//    loader: "babel-loader",//    options: {//   }// }}]}
}
打包

打包
不寫配置,看打包結果(es5寫法是否可轉為es6)
打包結果:箭頭函數、let還在,說明沒有轉換為es5.

在這里插入圖片描述

問題
  • 為什么配置了babel-loader,es6仍沒有轉換為es5呢?
    • 規范
  • 采用何種es規范,不同年代有不同標準,目標是什么(支持ie與否)——babel不知要編譯到何種程度,于是沒有轉換。
    • 解決方案:給babel指定編譯規范——preset(可理解為集合好的編譯規范)
  • 項目中常用的preset是@babel/preset-env
3 安裝preset

安裝preset,命令:npm install @babe/preset-env --save-dev

在這里插入圖片描述

4 配置preset

配置preset

module.exports = {// loadermodule: {rules: [{// 每個對象是一個loadertest: /\.js$/,// loader: "babel-loader", // 寫法1use: {loader: 'babel-loader',options: {presets: [['@babel/preset-env',{targets: {//編譯目標browsers: [// 以瀏覽器為描述目標">1%",// 支持所有占有率>1%的瀏覽器"last 2 versions",//支持最后2個版本"not ie<=8" //不需要支持小于ie8以前的瀏覽器]}}]]}}}]}
}
5 打包

執行打包命令:webpack

打包結果:此時es6會編譯為es5,可以發現,打包文件沒有任何箭頭函數或let關鍵字,說明babel已經生效。
在這里插入圖片描述

3.1.2 .babelrc

  • 通常情況下,babel-loader配置不需要手動配置
  • 很多腳手架里會用到.babelrc

將babel-loader的配置移動到.babelrc里,寫法如下

.babelrc是json文件,需要遵循json格式。

// webpack.config.js
module.exports = {// loadermodule: {rules: [{// 每個對象是一個loadertest: /\.js$/,// loader: "babel-loader", // 寫法1use: {loader: 'babel-loader'}}]}
}
// .babelrc
{"presets": [["@babel/preset-env",{"targets": {"browsers": [">1%","last 2 versions","not ie<=8"]}}]]
}

即,將options移動到.babelrc文件里。

3.2 代碼規范——eslint

  • eslint官網:https://eslint.org/
  • eslint的本質
    • eslint自身不做任何代碼規范檢查。
    • 代碼規范是根據團隊成員習慣共同達成的規范,每個團隊的規范不盡相同,因此eslint無法做規范。
    • 可以使用第三方規范,插入eslint即可使用。

3.2.1 版本差異

  • webpack3-4,使用eslint-loader(5后廢棄)
  • webpack5,使用eslint-webpack-plugin

以前使用loader,現在改用插件。
配置的寫法是相似的。

3.2.2 配置

1 安裝eslint

命令:npm install eslint eslint-webpack-plugin --save-dev
需要安裝eslinteslint-webpack-plugin

此兩個包的關系與babel-loader和@babel/core類似。

安裝失敗,提示npm error network ‘proxy‘ config is set properly. See: ‘npm help config‘,參考https://blog.csdn.net/m0_74358570/article/details/141425542

2 注冊插件

注意配置文件是node語法。

// webpack.config.js
// 1 引入插件
const eslintplugin = require("eslint-webpack-plugin");
// 2 配置插件
module.exports = {plugins: [new eslintplugin({// 插件配置})]
}
3 配置插件

直接在webpack.config.js配置是可以的,但也可以像.babelrc一樣,單獨在其他文件——.eslintrc.js里配置。

// webpack.config.js
// 1 引入插件
const eslintplugin = require("eslint-webpack-plugin");
// 2 配置插件
module.exports = {plugins: [new eslintplugin()]
}
// .eslintrc.js
module.exports = {env: {browser: true,// 瀏覽器環境,可以使用window全局變量,如果是node則不能使用windowes2021: true // 項目es是2021標準},extends: [// 繼承規范],plugins: [// 使用插件作為規范],// 解析配置parserOptions: {ecmaVersion: 6, // 指定使用的es版本sourceType: "module", // 模塊化實現,默認script引入模塊(通過script標簽引入js),module:通過import引入ecmaFeature: {jsx: true, // 檢查jsx代碼}},rules: {"no-console": 0// 0/off:關閉檢查,1/warning: 警告,2/error: 錯誤(會中斷執行)}
}
4 rules——eslint檢查
  • eslint檢查主要在開發模式檢查,打包不會檢查——因此將代碼用開發模式啟動。
  • 命令:webpack-dev-server
  • 效果:rules屬性的no-console為0,項目啟動不會報錯(a.js中有console),為2,項目啟動會報錯。
  • 報錯處理
    1. 執行以上命令,需要安裝webpack-dev-server,安裝命令:npm install webpack-dev-server --save-dev
    2. 安裝成功后,執行webpack-dev-server,仍報錯
    3. package.json 中添加一個 script 來啟動 webpack-dev-server. 執行npm run webpack-dev-server
      // package.json
      "scripts": {"webpack-dev-server": "webpack-dev-server"
      }
      
    4. 執行過程中提示安裝webpack-cli
      • 注意需要升級webpack版本
    5. 再次執行npm run webpack-dev-server,仍有問題,不管了

3.2.3 規范

1 extends繼承規范
  • 如果一個個寫rules很麻煩,那么可以繼承現成的規范,如eslint-config-standardeslint-config-airbnb,可以安裝并繼承規范。

eslint-config-standard為例。

.eslintrc.js內定義的規范優先級要高于繼承的eslint-config-standard等規范。
多數項目會繼承eslint-config-standard規范。

1 安裝命令:npm install eslint-config-standard

安裝失敗,版本沖突疑似

2 繼承規范

// .eslintrc.js
// 修改了extends屬性
module.exports = {env: {browser: true,// 瀏覽器環境,可以使用window全局變量,如果是node則不能使用windowes2021: true // 項目es是2021標準},extends: [// 繼承規范"standard"],plugins: [// 使用插件作為規范],// 解析配置parserOptions: {ecmaVersion: 6, // 指定使用的es版本sourceType: "module", // 模塊化實現,默認script引入模塊(通過script標簽引入js),module:通過import引入ecmaFeature: {jsx: true, // 檢查jsx代碼}},rules: {"no-console": 0// 0/off:關閉檢查,1/warning: 警告,2/error: 錯誤(會中斷執行)}
}
2 plugins插件
  • plugins,支持特殊語法。
    • 提供額外的rules
    • 提供一套現成的規范

.vue文件,比如要求template內所有的內容需要寫在一個div標簽內,這樣的風格eslint本身的rules沒有,那么就需要用到plugins
vue項目會安裝eslint-plugin-vue,并且會定義vue特殊的rules,以及繼承vue規范。

eslint-plugin-vue為例
1 安裝eslint-plugin-vue,命令: npm install eslint-plugin-vue --save-dev
2 注冊插件

// .eslintrc.js
// 修改了extends屬性
module.exports = {env: {browser: true,// 瀏覽器環境,可以使用window全局變量,如果是node則不能使用windowes2021: true // 項目es是2021標準},extends: [// 繼承規范"standard","plugin:vue/strongly-recommended" //繼承vue的規范],plugins: [// 使用插件作為規范"vue"// 注冊插件],// 解析配置parserOptions: {ecmaVersion: 6, // 指定使用的es版本sourceType: "module", // 模塊化實現,默認script引入模塊(通過script標簽引入js),module:通過import引入ecmaFeature: {jsx: true, // 檢查jsx代碼}},rules: {"no-console": 0// 0/off:關閉檢查,1/warning: 警告,2/error: 錯誤(會中斷執行)}
}

p3代碼分割和打包似乎沒講.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85153.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85153.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85153.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Nginx轉發中相對路徑資源302問題的分析與解決

Nginx轉發中相對路徑資源302問題的分析與解決 典型案例&#xff1a;后端頁面引入./test.css的302問題 問題場景 假設我們有一個后端服務&#xff0c;其頁面中通過相對路徑引入了CSS文件&#xff1a; <!-- 后端頁面代碼 --> <link rel"stylesheet" href&…

Vue3 + TypeScript合并兩個列表到目標列表,并且進行排序,數組合并、集合合并、列表合并、list合并

在Vue 3 TypeScript中合并并排序兩個列表&#xff0c;可以通過以下步驟實現&#xff1a; 解決方案代碼 vue 復制 下載 <script setup lang"ts"> import { ref, computed } from vue;// 定義列表項類型 interface ListItem {id: number;name: string;valu…

Python-教程

1 需求 2 接口 3 示例 4 參考資料 Python 教程 — Python 3.13.5 文檔

Excel數據導出小記

文章目錄 前言一、DataTable >EXCEL二、DBReader >Excel &#xff08;NPOI&#xff09;三、分頁查詢 DbReader>Excel (MiniExcel)總結&#xff1a; 前言 最近經歷了一次數據量比較大的導出&#xff0c;也做了各種優化嘗試&#xff0c;這里稍記錄一下 一、DataTable …

深入理解鏈表數據結構:從Java LinkedList到自定義實現

引言 鏈表作為基礎數據結構之一&#xff0c;在Java集合框架中以LinkedList的形式提供。本文將深入分析Java原生LinkedList的實現機制&#xff0c;并介紹我自定義實現的MyLinkedList&#xff0c;最后對比兩者的設計差異與實現特點。 Java原生LinkedList解析 基本結構 Java的…

【深度學習】卷積神經網絡(CNN):計算機視覺的革命性引擎

卷積神經網絡&#xff08;CNN&#xff09;&#xff1a;計算機視覺的革命性引擎 一、算法背景&#xff1a;視覺智能的進化之路1.1 傳統視覺處理的困境1.2 神經科學的啟示 二、算法理論&#xff1a;CNN的核心架構2.1 基礎組成單元卷積層&#xff1a;特征提取引擎池化層&#xff1…

使用@SpringJUnitConfig注解開發遇到的空指針問題

Spring測試中的版本陷阱&#xff1a;SpringJUnitConfig與JUnit版本兼容性深度解析 一個看似簡單的空指針異常&#xff0c;背后可能隱藏著JUnit版本不匹配的“幽靈”。 一、SpringJUnitConfig&#xff1a;Spring與JUnit 5的橋梁 SpringJUnitConfig是Spring TestContext框架為**…

[2025CVPR]AdcSR:一種高效實世界圖像超分辨率的對抗擴散壓縮方法

目錄 1. 背景與挑戰 2. AdcSR模型概述 2.1 模型架構 2.2 訓練策略 3. 公式與原理 4. 創新點 5. 實驗與結果 5.1 實驗設置 5.2 結果對比 5.3 消融實驗 6. 結論 在計算機視覺領域&#xff0c;圖像超分辨率&#xff08;Image Super-Resolution, ISR&#xff09;一直是一…

Go 語言中的字符串基本操作

這篇文章已經放到騰訊智能工作臺的知識庫啦&#xff0c;鏈接在這里&#xff1a;ima.copilot-Go 入門到入土。要是你有啥不懂的地方&#xff0c;就去知識庫找 AI 聊一聊吧。 本篇將詳細講解 Go 語言中與字符串相關的操作。 1、rune 和 字符串長度 1、Go 函數語法約定 在開始…

數學建模會議筆記

看似優化模型 建立整數規劃模型 用優化軟件、啟發式方法、精確方法求解 建立圖論和組合優化模型用組合優化方法、啟發式方法求解 建立博弈論模型 數據統計分析與可視化- 數據擬合、參數估計、插值、數據的標準化、去偽補全相關度分析、分類、聚類等 最優化理論和方法 線性規劃…

學習昇騰開發的六天--ACL應用開發之運行第一個實例

1、下載一個實例&#xff0c;運行一個圖像分類實例&#xff08;環境&#xff1a;Ubuntu22.04&#xff0c;硬件&#xff1a;昇騰310B1&#xff0c;加速模塊&#xff1a;atlas 200i a2&#xff09; samples: CANN Samples - Gitee.com 目錄結構如下&#xff1a; ├── data │…

可靈AI-快手公司自主研發的一款AI視頻與圖像生成工具

可靈AI是由快手公司自主研發的一款AI視頻與圖像生成工具&#xff0c;于2024年6月正式推出。以下是對其的詳細介紹&#xff1a; 核心功能 AI視頻生成&#xff1a; 文生視頻&#xff1a;輸入文字描述&#xff0c;AI可自動生成匹配的視頻片段。圖生視頻&#xff1a;上傳圖片&…

創客匠人解析:存量時代創始人 IP 打造與免費流量池策略

在存量競爭的商業環境中&#xff0c;企業如何突破增長瓶頸&#xff1f;創客匠人結合新潮傳媒創始人張繼學的實戰洞察&#xff0c;揭示 “品牌 IP” 雙輪驅動下的免費流量池構建邏輯&#xff0c;為知識變現與創始人 IP 打造提供新思路。 一、存量時代的流量革命&#xff1a;從…

提升語義搜索效率:LangChain 與 Milvus 的混合搜索實戰

我從不幻想人生能夠毫無波折&#xff0c;但我期望遭遇困境之際&#xff0c;自身能夠成為它的克星。 概述 LangChain與Milvus的結合構建了一套高效的語義搜索系統。LangChain負責處理多模態數據&#xff08;如文本、PDF等&#xff09;的嵌入生成與任務編排&#xff0c;Milvus作…

MySQL配置簡單優化與讀寫測試

測試方法 先使用sysbench對默認配置的MySQL單節點進行壓測&#xff0c;單表數據量為100萬&#xff0c;數據庫總數據量為2000萬&#xff0c;每次壓測300秒。 sysbench --db-drivermysql --time300 --threads10 --report-interval1 \--mysql-host192.168.0.10 --mysql-port3306…

獵板深耕透明 PCB,解鎖電子設計新邊界

在電子技術快速迭代的當下&#xff0c;獵板始終關注行業前沿&#xff0c;透明 PCB 作為極具創新性的技術&#xff0c;正在改變電子設備的設計與應用格局。? 從傳統的綠色、棕色 PCB 到如今的透明 PCB&#xff0c;其突破在于特殊基材與導電材料的運用&#xff0c;實現 85%-92%…

FLAML:快速輕量級自動機器學習框架

概述 FLAML&#xff08;Fast and Lightweight AutoML&#xff09;是微軟開發的一個高效的自動機器學習&#xff08;AutoML&#xff09;框架。它專注于在有限的計算資源和時間約束下&#xff0c;自動化機器學習管道的構建過程&#xff0c;包括特征工程、模型選擇、超參數調優等…

Github 以及 Docker的 wsl --list --online無法訪問問題

修改電腦DNS 騰訊 DNS IP&#xff1a;119.29.29.29 備用&#xff1a;182.254.116.116 阿里DNS IP&#xff1a;223.5.5.5 223.6.6.6 百度DNS IP:180.76.76.76 谷歌DNS IP:8.8.8.8

Go 語言中的變量和常量

這篇文章已經放到騰訊智能工作臺的知識庫啦&#xff0c;鏈接在這里&#xff1a;ima.copilot-Go 入門到入土。要是你有啥不懂的地方&#xff0c;就去知識庫找 AI 聊一聊吧。 1、變量的聲明與使用 我們來探討編程語言中最核心的概念之一&#xff1a;變量。 1、靜態語言中的變量…

破局傳統訂貨!云徙渠道訂貨系統賦能企業數字化渠道升級

在數字化浪潮的推動下&#xff0c;傳統經銷商訂貨模式面臨著諸多挑戰&#xff0c;如信息孤島、系統崩潰、移動化不足等問題。云徙渠道訂貨系統憑借其創新的數字化架構和強大的功能模塊&#xff0c;正在成為企業實現渠道數字化轉型的重要工具。 系統功能與創新 云徙渠道訂貨系統…