webpack --- [讀書筆記] webpack中常用的一些配置項

1. Webpack

當前Web開發面臨的困境

  • 文件依賴關系錯綜復雜
  • 靜態資源請求效率低
  • 模塊化支持不友好
  • 瀏覽器對高級JavaScript特性兼容程度低

1.1 webpack概述

webpack是一個流行的前端項目構建工具,可以解決當前web開發中所面臨的困境.

webpack提供了友好的模塊化支持,以及代碼壓縮混淆、處理js兼容問題、性能優化等強大的功能,從而讓程序員把工作的重心放到具體的功能實現上,提高了開發效率和項目的可維護性

1.2 webpack的基本使用

1.2.1 創建列表隔行變色項目

  1. 創建package.json: npm init -y
  2. 新建src: 源代碼目錄
  3. 新建 src -> index.html
  4. 初始化頁面基本的結構
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="./index.js"></script>
</head>
<body><ul><li>這是第1個li</li><li>這是第2個li</li><li>這是第3個li</li><li>這是第4個li</li><li>這是第5個li</li><li>這是第6個li</li><li>這是第7個li</li><li>這是第8個li</li><li>這是第9個li</li></ul>
</body>
// index.js
import $ from 'jquery'$(function() {$('li:odd').css('backgroundColor', 'lightblue')$('li:even').css('backgroundColor', '#ccc')
})
  1. 瀏覽器對ES6的兼容性不是很好,因此以上代碼可能不會顯示列表隔行變色.故下面需要使用webpack配置對ES6的支持

1.2.2 在項目中安裝和配置webpack

  1. 安裝webpack相關的包: npm install webpack webpack-cli -D
  2. 在項目根目錄中,創建名為 webpack.config.js的webpack配置文件
  3. 在webpack的配置文件中,初始化如下基本配置:
module.exports = {mode: 'development'
}
  1. 在 package.json配置文件中的scripts節點下,新增dev腳本如下:
"scripts":{"dev": "webpack"
}

完成上述配置后,在命令行輸入:npm run dev, webpack就會在當前目錄的dist文件夾下面自動生成一個main.js文件.里面裝的是瀏覽器兼容的JS代碼,因此只需在index.html中導入main.js即可完成2.2.1的需求

1.2.3 入口與出口

webpack的4.x版本中默認約定:

  • 打包的入口文件為 src -> index.js
  • 打包的輸出文件為 dist -> main.js

如果要修改打包的入口與出口,可以修改webpack.config.js:

const path = require('path');
module.exports = {entry: path.join(__dirname, './src/index.js'),output: {path: path.join(__dirname, './dist'),filename: 'bundle.js'}
}

1.2.4 自動打包功能

  1. 自動打包工具: npm install webpack-dev-server -D
  2. 修改 package.json -> scripts
// package.json
"scripts": {"dev": "webpack-dev-server"
}
  1. 執行后會有如下幾行輸出
i 「wds」: Project is running at http://localhost:8080/
i 「wds」: webpack output is served from /
i 「wds」: Content not from webpack is served from D:\series\17
i 「wdm」: Hash: 5ea127005e76e344e080
Version: webpack 4.41.6
Time: 429ms
Built at: 2020-02-12 18:46:23Asset     Size  Chunks             Chunk Names
bundle.js  671 KiB    main  [emitted]  main
Entrypoint main = bundle.js

第一句話說明項目運行在 'http://localhost:8080’中

第二句話說明項目的打包文件在當前目錄下,最好一句話說明打包的名字為bundle.js(在內存中)

因此需要在index.html 導入打包的文件

  1. http://localhost:8080地址查看自動打包效果

1.2.5 html-webpack-plugin生成預覽頁面

  • 作用: 將src下面的index.html復制到內存中,且默認的路徑是項目的根目錄,還會自動導入內存中的bundle.js

  • 使用步驟:

    • npm install html-webpack-plugin

    • 修改webpack.config.js

    • const HtmlWebpackPlugin = require('html-webpack-plugin')
      const htmlPlugin = new HtmlWebpackPlugin({template: './src/index.html', // 指定要用到的模板文件filename: 'index.html'
      })module.exports = {plugins: [htmlPlugin]
      }
      

1.2.6 自動打包相關參數

// package.json
// --open 打包完成后自動打開瀏覽器
// --host 配置IP地址
// --port 配置端口
"scripts": {"dev": "webpack-dev-server --open --host 127.0.0.1 --port 8888"
}

1.3 通過loader打包非js模塊

在實際開發中,webpack默認只能打包處理以 .js 后綴名結尾的模塊,其他非 .js 后綴名的模塊,webpack默認處理不了,需要調用 loader 加載器才可以正常打包.

1.3.1 打包處理CSS文件

  1. npm i style-loader css-loader -D
  2. webpack.config.js -> module -> rules
// webpack.config.js
module.exports = {module:{rules: {test: /\.css$/, use: ['style-loader', 'css-loader']}}
}
// 多個loader的調用順序是: 從后往前調用的

1.3.2 打包處理less文件

  1. npm i less-loader less -D
  2. webpack.config.js -> module -> rules
// webpack.config.js
module.exports = {module:{rules: {test: /\.less$/, use: ['style-loader', 'css-loader','less-loader']}}
}
// 多個loader的調用順序是: 從后往前調用的
// can not find module 'less' -> 是因為沒用安裝less

1.3.3 打包處理scss文件

  1. npm i sass-loader node-sass -D
  2. webpack.config.js -> module -> rules
// webpack.config.js
module.exports = {module:{rules: {test: /\.scss$/, use: ['style-loader', 'css-loader','sass-loader']}}
}
// 多個loader的調用順序是: 從后往前調用的
// 安裝的是sass,驗證的是scss
// node-sass的安裝可能需要改變源,

1.3.4 自動添加css的兼容前綴

  • npm i postcss-loader autoprefixer -D
// postcss.config.js
const autoprefixer = require('autoprefixer')
module.exports = {pulugins: [autoprefixer]
}
// webpack.config.js
module.exports = {module:{rules:[{ test: /\.css$/, use: ['style-loader', 'css-loader', 'postcss-loader']}]}
}

1.3.5 打包樣式表中的圖片和字體文件

  • npm i url-loader file-loader -D
// webpack.config.js
module.exports = {module:{rules:[{ test: /\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/, use:'url-loader?limit=16940' }]}
}

其中 ? 之后的是loader的參數項.

limit用來指定圖片的大小,單位是字節(byte),只有小于limit大小的圖片,才會被轉為base64圖片

1.3.6 打包處理js文件中的高級語法

  • babel轉換器相關的: npm i babel-loader @babel/core @babel/runtime -D

  • babel語法插件相關的: npm i @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D

// babel.config.js
module.exports = {presets: ['@babel/preset-env'],plugins: [ '@babel/plugin-transform-runtime', '@babel/plugin-proposal-class-properties']
}
// webpack.config.js
module.exports ={module:{rules:[{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }]}
}

1.3.7 webpack中配置vue組件的加載器

  • npm i vue-loader vue-template-compiler -D

  • // webpack.config.js
    const VueLoaderPlugin = require('vue-loader/lib/plugin')
    module.exports = {module:{rules:[{ test: /\.vue$/, loader: 'vue-loader'}]},plugins:[new VueLoaderPlugin()]
    }
    

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

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

相關文章

spring中bean的作用域屬性single與prototype的區別

https://blog.csdn.net/linwei_1029/article/details/18408363 轉載于:https://www.cnblogs.com/stanljj/p/9907444.html

windows程序設計.第一個windos程序

Windows程序設計&#xff08;第5版&#xff09; windows程序需要調用API。 第一個Windows程序 1 /*HelloMsg.c -- Displays "Hello World!" in a message box*/ 2 #include <Windows.h> 3 4 int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE…

java接口練習2

1、編寫2個接口&#xff1a;InterfaceA和InterfaceB&#xff1b;在接口InterfaceA中有個方法voidprintCapitalLetter()&#xff1b;在接口InterfaceB中有個方法void printLowercaseLetter()&#xff1b;然后寫一個類Print實現接口InterfaceA和InterfaceB&#xff0c;要求printC…

vue --- [全家桶] Vuex

1. Vuex 概述 1.1 組件之間共享數據的方式 父向子傳值: v-bind 屬性綁定子向父傳值: v-on 事件綁定兄弟組件之間共享數據: EventBus$on: 接收數據的那個組件$emit: 發送數據的那個組件 1.2 Vuex是什么 Vuex: 是實現組件全局狀態(數據)管理的一種機制,可以方便的實現組件之間…

C#/WPF程序開機自動啟動

最近一個C/S項目客戶要求開機自啟的功能&#xff0c;網上找了一些方法&#xff0c;不頂用&#xff1b;最后自己去翻書&#xff0c;找到了這段代碼&#xff0c;親測可用&#xff0c;Wpf環境下需要改下獲取程序目錄的方式即可&#xff0c;Winform直接可用。 1 #regio…

github --- 多個項目的管理方式

1. 多個項目管理方式 進入項目根目錄: git init 將當前的項目添加到暫存區中: git add . (注意: 最后有一個點) 將暫存區的內容放到本地倉庫: git commit -m 初始化項目 登錄github , 新建遠程倉庫 在本地添加遠程倉庫的源: git remote origin https://github.com/Lizhhhh/…

記錄一個坑

導入項目后運行控制臺打印異常,pom都已檢查,沒有任何問題 解決辦法: 項目右擊---properties---deployment assembly---add---java build path entries---maven deoendencies 保存并關閉 解決... 這個問題第一次遇到 檢查了很多遍maven的依賴,明明都已經配置好了 ,仍然產生了…

洛谷 P4011 孤島營救問題【最短路+分層圖】

題外話&#xff1a;昨夜腦子昏沉&#xff0c;今早一調試就過了...錯誤有&#xff1a;我忘記還有墻直接穿墻過...memset初始化INF用錯了數...然后手殘敲錯一個狀態一直過不了樣例...要是這狀態去比賽我簡直完了......orz 題目鏈接&#xff1a;https://www.luogu.org/problemnew/…

輸出控制臺信息到日志 并 通過cronolog對tomcat進行日志切分

windows下tomcat默認并不會把控制臺輸出的信息都記錄進日志文件。但是在生產環境中&#xff0c;出現問題時&#xff0c;控制臺的日志輸出是無法查據的&#xff0c;因此需要將日志記錄下來。 解決方法&#xff1a; 輸出日志到文件 修改tomcat的bin目錄下的startup.bat文件&#…

微信小程序 --- [筆記小結] 環境搭建,基礎學習

說明 源代碼拷貝源代碼 git clone https://github.com/Lizhhhh/miniProgram.git進入目錄cd miniProgram查看tag: git tag選擇需要查看的知識點,如: git checkout 02_Text 學習的視頻失效了…后續還會找資源學習… 小程序 地址 一種不需要下載安裝即可使用的應用,它實現了應…

監聽發現局域網dropbox客戶端broadcast-dropbox-listener

監聽發現局域網dropbox客戶端broadcast-dropbox-listenerDropbox是一款網盤文件同步工具。為了實現局域網內同步&#xff0c;該工具會通過UDP 17500端口發送廣播包。Nmap的broadcast-dropbox-listener腳本可以監聽局域網內dropbox客戶端發送的廣播包&#xff0c;并顯示客戶端的…

tornada-數據庫

數據庫 torndb安裝連接初始化執行語句 executeexecute_rowcount查詢語句 getquery與Django框架相比&#xff0c;Tornado沒有自帶ORM&#xff0c;對于數據庫需要自己去適配。我們使用MySQL數據庫。 在Tornado3.0版本以前提供tornado.database模塊用來操作MySQL數據庫&#xff0c…

使用Puppeteer進行數據抓取(一)——安裝和使用

Puppeteer 是 Google Chrome 團隊官方的Chrome 自動化工具。它本身是基于Chrome Dev Protocol協議實現的&#xff0c;但它提供了更高層次API封裝&#xff0c;使用起來更加方便快捷。加上google這個大咖加官方的背景&#xff0c;更使得其地位更是提升了不少。 我之前在文章使用C…

讀書筆記 --- [基礎知識點] 小結1

1. TCP,UDP區別 TCPUDP基于有連接基于無連接對系統資源要求較多對系統資源要求少程序比較復雜程序結構比較簡單流模式數據報模式保證數據的準確性不保證數據的準確性保證數據的順序不保證數據的順序 2. OSI七層模型以及tcp/ip四層模型 OSI七層模型tcp/ip四層模型常用的5層模型…

連讀

一、輔音元音的連讀 單詞的音標以輔音結尾&#xff0c;下一個單詞以元音開頭。 1、/n/ /?/ 連讀后就餓會發出“呢” 這個音&#xff1b; 2、/v/ /?/ son of a bitch 3、/t/ // 4、/t/ /?:/ 差不多是 tall 這個音 not at all 5、/l/ /?/ call it a day // 今天就到…

讀書筆記 --- [基礎知識點] 小結2

1. TCP和UDP的區別 \TCPUDP是否連接面向連接無連接是否可靠可靠不可靠連接對象個數1對11對1 或1 對多傳輸方式面向字節面向報文首部開銷20字節8字節使用場景可靠傳輸,如: 文件傳輸實時應用(IP電話、視頻會議、直播等) 2. WebSocket (1)什么是WebSocket? WebSocket是HTML5中的…

Spring差缺補漏

Spring差缺補漏 Spring4.0新特性 1&#xff1a;全面支持java1.8 2&#xff1a;空指針 RequestMapping("/user") public User getUser(String id,Option<String> userName){} 3&#xff1a;泛型依賴注入 public abstract class BaseService<M extends Serial…

tar壓縮/解壓用法

格式&#xff1a;tar zcvf 壓縮后的路徑及包名 你要壓縮的文件 z:gzip壓縮 c:創建壓縮包 v:顯示打包壓縮解壓過程 f:接著壓縮 t:查看壓縮包內容 x:解壓 X:指定文件列表形式排除不需要打包壓縮的文件或目錄 -exclude:指定排除文件或目錄不需要打包壓縮的文件或目錄&#xff08;也…

讀書筆記 --- [基礎知識點] 小結3

1. cookie與session的區別 參考 cookie機制 Cookie是服務器在本地機器上存儲的小段文本,并隨每一次發送至同一個服務器。網絡服務器用HTTP頭向客戶端發送cookies,在客戶端中,瀏覽器解析這些cookies并將它們保存為一個本地文件,它會自動將同一服務器的任何請求束縛上這些cook…

SPI接口比IIC速度快的理解

http://bbs.21ic.com/icview-279512-1-1.html I2C 的長處是超級低廉&#xff0c;而且是協議簡單的總線。spi是端口&#xff0c;不是總線。 USB協議復雜。I2C因為跨電平的標準&#xff0c;所以是OC 上拉的&#xff0c;上拉高電平驅動能力很弱&#xff0c;所以決定了他跑不快。但…