webpack 學習總結demo

来源:https://www.cnblogs.com/hsgeng/archive/2018/06/06/9146497.html
-Advertisement-
Play Games

github源碼地址 https://github.com/ghshuo/webpack demo webpack介紹 webpack 是一個現代 JavaScript 應用程式的靜態模塊打包器(module bundler)。當 webpack 處理應用程式時,它會遞歸地構建一個依賴關係圖(dep ...


github源碼地址 https://github.com/ghshuo/webpack-demo

webpack介紹

webpack 是一個現代 JavaScript 應用程式的靜態模塊打包器(module bundler)。當 webpack 處理應用程式時,它會遞歸地構建一個依賴關係圖(dependency graph),其中包含應用程式需要的每個模塊,然後將所有這些模塊打包成一個或多個 bundle。

學習文檔 :

安裝

1.全局安裝webpack

npm install webpack -g
npm install [email protected] -g 可以規定webpack的安裝版本

2.初始化

webpack初始化

3.項目中局部安裝

npm install webpack --save-dev

webpack.config.js配置

1.entry選項(入口配置)

entry:{
entry: './src/entry.js',
}

2.entry選項(出口配置)

output:{
path: path.resolve(__dirname,'dist'), // 出口地址 絕對路徑
filename:'[name].js' // //輸出的文件名稱
}

3.module模塊

解讀css

安裝

npm install style-loader --save-dev
npm install --save-dev css-loader

module模塊中配置

module:{
rules: [
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
}
]
},

配置圖片

* npm install --save-dev file-loader url-loader
* file-loader 解決引用路徑的問題
* url-loader 如果圖片較多,會發很多http請求,會降低頁面性能。
{ // 配置圖片
test: /\.(png|jpg|gif)/,
use:[{
loader:'url-loader', // url-loader
options:{
limit:400000, // 是把小於400000B的文件打成Base64的格式
outputPath:'images/' // 把圖片打包到指定路徑下
}
}]
}

直接在文件中引用img圖片

npm install html-withimg-loader --save
{
test: /\.(htm|html)$/i,
use:[ 'html-withimg-loader'] 
}

4.plugins插件

壓縮代碼

* 引入: 不需要安裝 const uglifyJsPlugin = require('uglifyjs-webpack-plugin');
配置
plugins:[
new uglifyJsPlugin() 
]

html 打包

* npm install --save-dev html-webpack-plugin
const htmlPlugin = require('html-webpack-plugin');

plugins:[
new htmlPlugin({
minify:{
removeAttributeQuotes:true // minify:是對html文件進行壓縮,removeAttrubuteQuotes是卻掉屬性的雙引號。
},
hash:true, // 為了開發中js有緩存效果,所以加入hash,這樣可以有效避免緩存JS。
template:'./src/index.html' //是要打包的html模版路徑和文件名稱
})
]

5.熱更新功能

npm install webpack-dev-server --save-dev

再設置

devServer:{
//設置基本目錄結構
contentBase:path.resolve(__dirname,'dist'),
//伺服器的IP地址,可以使用IP也可以使用localhost
host:'localhost',
//服務端壓縮是否開啟
compress:true,
//配置服務埠號, 可以自己設置埠號
port: 1818
}

一般直接啟動 npm run server 查看就能進行熱更新

如果不能進行熱更新添加 HotModuleReplacementPlugin插件

plugins 中配置

new webpack.HotModuleReplacementPlugin()

6.CSS分離與圖片路徑處理

把CSS單獨提取出來,分離css

npm n install --save-dev extract-text-webpack-plugin
const extractTextPlugin = require("extract-text-webpack-plugin");
plugins[
new extractTextPlugin("/css/index.css")
]
再配置下模塊
module:{
rules:[
{
test: /\.css$/,
use: extractTextPlugin.extract({
fallback: "style-loader",
use: "css-loader"
})
}
]
}

分離出來之後css路徑不正確 需要下麵修改下
var filePath = {
publicPath: "http://localhost:1818/" // 聲明一個路徑 處理靜態文件路徑
}
//出口文件的配置項
output:{
publicPath:website.publicPath
}

安裝css預編譯語言

1.less

npm install --save-dev less
npm install --save-dev less-loader

webpack.config.js
配置less

{
test: /\.less$/,
use: [{
loader: "style-loader" 
}, {
loader: "css-loader" 
, {
loader: "less-loader"
}]
}

less 分離

npm n install --save-dev extract-text-webpack-plugin
const extractTextPlugin = require("extract-text-webpack-plugin");
plugins[
new extractTextPlugin("/css/index.css")
]

use:extractTextPlugin.extract({
use:[{
loader:'css-loader'
},{
loader:'less-loader'
}],
fallback:'style-loader'
})

2.sass

npm install --save-dev node-sass
npm install --save-dev sass-loader
{
test: /\.scss$/,
use: extractTextPlugin.extract({
use: [{
loader: "css-loader"
}, {
loader: "sass-loader"
}],
fallback: "style-loader"
})
}

自動處理css3屬性前戳

需要安裝兩個包postcss-loader 和autoprefixer(自動添加首碼的插件)

npm n install --save-dev postcss-loader autoprefixer

在webpack.config.js同級目錄下新建一個postcss.config.js文件

module.exports = {
plugins: [
require('autoprefixer')
]
}

loader配置

{
test: /\.css$/,
use: extractTextPlugin.extract({
fallback: 'style-loader',
use: [
{ loader: 'css-loader', options: { importLoaders: 1 } },
'postcss-loader'
]
})

}

消除未使用的CSS

安裝PurifyCSS-webpack

npm i -D purifycss-webpack purify-css

引入glob
因為我們需要同步檢查html模板,所以我們需要引入node的glob對象使用。在webpack.config.js文件頭部引入glob。

constc glob = require('glob');

引入purifycss-webapck

constc PurifyCSSPlugin = require("purifycss-webpack");

配置plugins

new PurifyCSSPlugin({
paths: glob.sync(path.join(__dirname, 'src/*.html')),
})

babel

把es6 轉化成es5 語法

npm i -D babel-loader babel-core babel-preset-env babel-polyfill

module中配置

{
test:/\.(jsx|js)$/,
use:{
loader:'babel-loader',
},
exclude:/node_modules/
}

配置babel預設文件
在根目錄下創建一個.babelrc文件

{
"presets": ["env"]
}

打包調試

source-map:在一個單獨文件中產生一個完整且功能完全的文件。這個文件具有最好的source map,但是它會減慢打包速度;
cheap-module-source-map:在一個單獨的文件中產生一個不帶列映射的map,不帶列映射提高了打包速度,但是也使得瀏覽器開發者工具只能對應到具體的行,不能對應到具體的列(符號),會對調試造成不便。
eval-source-map:使用eval打包源文件模塊,在同一個文件中生產乾凈的完整版的sourcemap,但是對打包後輸出的JS文件的執行具有性能和安全的隱患。在開發階段這是一個非常好的選項,在生產階段則一定要不開啟這個選項。
cheap-module-eval-source-map:這是在打包文件時最快的生產source map的方法,生產的 Source map 會和打包後的JavaScript文件同行顯示,沒有影射列,和eval-source-map選項具有相似的缺點。

module.exports = {
devtool: 'eval-source-map',
}
}

配置生產和開發並行

修改package.json命令

其實就是添加一個dev設置,並通過環境變數來進行區分,下麵是package.json里的值。

"scripts": {
"server": "webpack-dev-server --open",
"dev":"set type=dev&webapck",
"build": "set type=build&webpack"
}

修改webpack.config.js文件

if(process.env.type == "build"){
var filePath = {
publicPath: "線上地址/"
}
}else{
var filePath = {
publicPath: "本地地址/"
}
}

列印傳遞過來的值

console.log( encodeURIComponent(process.env.type) );

引用第三方庫

安裝

npm install --save jquery

用plugin 引入 ProvidePlugin插件

constc webpack = require('webpack');

webpack.config.js中plugins配置

plugins:[
new webpack.ProvidePlugin({
$:"jquery"
})
]

watch 用法

隨著項目大了,項目進行聯調時,我們不需要每一次都去打包,使用watch解決了這個麻煩,只要代碼進行保存之後會自動進行打包。 watch是webpack中自帶插件

watchOptions:{
//檢測修改的時間,以毫秒為單位
poll:1000, 
//防止重覆保存而發生重覆編譯錯誤。這裡設置的500是半秒內重覆保存,不進行打包操作
aggregateTimeout:500, 
//不監聽的目錄
ignored:/node_modules/, 
}

但是運行這個插件 必須要引入webpack

const webpack = require('webpack'); 

運行webpack --watch 進行打包

添加註釋版權所有

BannerPlugin插件
js上添加z註釋是誰寫的 ,創建時間,都可以進行設置

new webpack.BannerPlugin('hsgeng版權所有')

版權註釋

多個第三方類庫抽離

npm instawll vue --save
npm install --save jquery

入口文件配置

entry:{
entry:'./src/entry.js',
jquery:'jquery',
vue:'vue'
}
new webpack.optimize.CommonsChunkPlugin({
//name對應入口文件中的名字,我們起的是jQuery
name:['jquery','vue'],
//把文件打包到哪裡,是一個路徑
filename:"assets/js/[name].js",
//最小打包的文件模塊數,這裡直接寫2就好
minChunks:2
})

靜態資源輸出

項目中有些沒有引用的靜態資源(圖片、開發文檔),想在打包的時候保留這些靜態資源,可以直接打包到指定的文件夾下麵

安裝

npm install --save-dev copy-webpack-plugin

引入

const copyWebpackPlugin= require("copy-webpack-plugin");

plugins 進行配置

new copyWebpackPlugin([{
from:__dirname+'/src/public', // 要打包的靜態資源目錄地址
to:'./public' // 要打包到的文件夾路徑,跟隨output配置中的目錄
}])

靜態資源打包輸出

json配置文件使用

入口文件中引用json

var json =require('../config.json');
document.getElementById("json").innerHTML= json.name;

打包命令

webpack

運行

npm run server

總結

學習webpack過程中進行了總結。如果有什麼不對地方,請大家指正一下,謝謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這兩天在GitHub上傳了一個自定義ViewPager: " CoolViewPager " ,具有以下功能特征: 1. 支持水平及垂直方向迴圈滾動 2. 支持自動滾動 3. 支持自動滾動方向、滾動時間、間隔時間的設置 4. 支持調用notifyDataSetChanged實時刷新界面 5. 支持邊 ...
  • java.net.UnknownHostException: Unable to resolve host "www.baidu.com": No address associated with hostname 錯誤原因:很明顯是連不上這台主機,百度功能變數名稱沒錯 解決方式:手機沒聯網(當然排除你是其他 ...
  • #########################################################################介紹Node.js Stream(流)Stream 是一個抽象介面,Node 中有很多對象實現了這個介面。例如,對http 伺服器發起請求的request ...
  • 店鋪裝修-PC端-基礎頁-首頁-裝修頁面:編輯“菜單”模塊-顯示設置,粘貼如下CSS: 自定義導航示例:https://hotshop.bbs.taobao.com/detail.html?postId=7000589 進入CSS導航線上生成工具頁面(http://taobaokaidian.com ...
  • 簡單選擇器 類 id 元素/標簽 * 複合(sel1,sel2)逗號隔開 層次選擇器 s1 s2;後代選擇器,空格隔開 p>c;子代選擇器;不包括孫代及以下 p+next ;相鄰選擇器 p~sub;兄弟選擇器,同一父級下併列子代 表單選擇器,表單form下元素 :input;包括 input,tex ...
  • 一款瀏覽器仿EXCEL純JS表格控制項,純國產化,支持雙擊編輯、設置公式、設置顯示小數精度、下拉框、自定義單元格、複製粘貼、不連續選定、合併單元格、隱藏列、鍵盤操作等。 ...
  • 請你設計出以下圖片里的這個樣式的表格 步驟: 2.將table里的cellspacing設置成0 外邊距是不見了,但是和我們想要完成的圖片有一定的差距,我們發現這樣做出來的圖片好像是兩條線合併到了一起一樣,實際上確實是兩條線合併到了一起的,它是將每個單元格的邊距和表格的邊距重疊到了一起才有的這個圖形 ...
  • 1.什麼是列表標簽? 列表標簽的作用:給一堆數據添加列表語義,也就是告訴搜索引擎,告訴瀏覽器這一堆數據是一個整體 2.HTML列表標簽的分類 2.1無序列表(企業開發中用到最多)(unordered list) 2.2有序列表 (企業開發中用的最少) (ordered list) 2.3定義列表 ( ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...