Webpack 常用命令總結以及常用打包壓縮方法

来源:https://www.cnblogs.com/Anderson-An/archive/2018/11/23/10009446.html
-Advertisement-
Play Games

前言:Webpack是一款基於node的前端打包工具,它可以將很多靜態文件打包起來,自動處理依賴關係後,生成一個.js文件,然後讓html來引用,不僅可以做到按需載入,而且可以減少HTTP請求,節約帶寬。 常用命令如下: npm install webpack -g // 全局安裝webpack n ...


 前言:Webpack是一款基於node的前端打包工具,它可以將很多靜態文件打包起來,自動處理依賴關係後,生成一個.js文件,然後讓html來引用,不僅可以做到按需載入,而且可以減少HTTP請求,節約帶寬。

常用命令如下:

npm install webpack -g   // 全局安裝webpack npm init -y              //初始化預設的package.json文件 npm install webpack --save-dev   //下載webpack插件到node_modules 併在package.json文件中加上webpack的配置內容

webpack    //對項目進行打包

webpack   --watch   // 自動監控文件的改變 webpack  --display-modules  //打包時顯示隱藏的模塊 webpack  --display-chunks   //打包時顯示chunks webpack  --display-error-details  //顯示詳細錯誤信息     npm install {whatever}-loader  --save-dev   //安裝loader並將該loader配置到package.json文件中   =======================

 

1.配置與安裝

在node已經安裝完成的前提下,全局安裝webpack

$ cd d:

$ mkdir test && cd test //創建test ,併進入

$ npm install -g webpack //等待100s,安裝完成,也可以使用淘寶鏡像

$ npm init //初始化package.json文件

$ npm install --save-dev webpack //添加依賴 ,在package.json中聲明依賴,等待安裝完成

 

2.基本操作$webpack main.js webpack.js

當前目錄下創建如下工作結構:

/---------test

----app
----main.js
----index.js

----index.html

項目目錄下,app文件夾含有兩個js文件,修改如下:

//main.js ,這是Webpack主要的入口文件

require('./index.js');

 

//index.js ,這是被主文件引用的文件

document.write('Hello,world!');

 

//index.html ,供瀏覽器解讀

<html>

...

<script src="./webpack.js"> // 引用同目錄下的webpack.js

...

</html>

webpack.js是哪來的呢?就是通過webpack打包生成的js文件,接下來,

開始生成webpack.js文件:

$ webpack main.js webpack.js


可以看到已經打包成功了,此時查看IDE中的項目目錄,根目錄下已經多了一個webpack.js文件。然後用瀏覽器打開index.html,效果如下:

 

 

此時查看網頁源代碼:

 

 

3.進階操作

(配置webpack.config.js或者配置package.json,後者依賴前者)每次在命令行敲目錄調試,是很痛苦的,因此需要一次配置,多次使用的方法。

在根目錄下新建文件: webpack.config.js (名字就是這樣,規定,不能改),內容如下:

module.exports = {
//入口文件位置
entry:__dirname+'/app/main.js',

//出口
output:{
//路徑
path:__dirname,
filename:'webpack.js'
}

}

這裡的 __dirname是一個node的全局變數,用於指向當前的工作目錄,調皮的我console.log了一下這個變數:


確認無疑。

這樣,我們的webpack.js寫完以後,可以直接在命令行中敲:

$ webpack
1
可以發現,項目中也同樣的會生成目標js文件,也就是webpack.js,這樣非常方便,省事。

還有一種配置方法,將package.json文件中”scripts”裡面添加鍵值對:


這樣同樣可以在項目目錄生成目標js文件,直接在 命令行里敲

$ npm start //因為webpack是全局安裝的,直接value給webpack,而不用跟路徑
1
如果start被占用了/衝突了,也可以在scripts下麵自定義一個鍵值對:

"zq":"webpack"

$ npm run zq //稍作修改cmd 命令

最後還是可以生成。

4.webpack伺服器監聽代碼變動,自動刷新及source-map

4.1關於source-map,

也就是在webpack.config.js中配置 devtool (develpment tool)的值,例如我這樣配置:

 

在webpack完成文件打包後,會自動生成一個與目標文件相同名的 .map文件,用來說明打包文件的每個地方對應的是哪些文件,簡而言之,讓你能知道源碼是在哪裡錯的,幫你刨根問底,而不用開發者自己去Debug。

參考文章1:入門WEBPACK,看這篇文章就夠了—-簡書

參考文章2:Webpack中的sourcemap

4.2 webpack伺服器

首先單獨安裝 server 包 :

$ npm install --save-dev webpack-dev-server
1
同樣的,在webpack.config.js中做出相應的配置:

module.exports = {
devtool: 'source-map',
entry: __dirname + "/app/main.js",
output: {
path: __dirname,
filename: 'bundle.js'
},
module: {

},

devServer: {
contentBase: "./",//本地伺服器載入index.html頁面所在的目錄,這裡寫的是根目錄
historyApiFallback: true,//不跳轉
inline: true//實時刷新,
}

}

 


配置好config後,還得配置一下package.json,在scirpts裡面添加server:

 

"scripts": {
"start": "webpack",
"server": "webpack-dev-server --open", 
"test": "echo \"Error: no test specified\" && exit 1"
},

 



接著,在命令行運行


$ npm run server

/*屆時伺服器會自動啟動, 並且打開瀏覽器,預設埠為8080,也可以

 

devServer:{

port:4040 //自己配置埠為4040

}

 


下麵是一個伺服器跑起來後的演示結果,我不斷的修改work.js 中 document.write的值,從而伺服器會自動檢測並刷新頁面:

 

5.非JS文件的操作(img,json,css……),豬腳:Loaders

5.1 基本概念


前面都在說js文件,官網說什麼文件都可以當做模塊打包,下麵就來試試非js文件。

首先要明確的是,webpack只能識別js文件,如果要識別非js文件,就需要loader來解析這些文件。

loaders 需要單獨安裝,並且在webpack.config.js中的modules關鍵字下進行配置。

Webpck2以上已經支持對json的解析打包,不需要額外的loaders,可以在main.js中

var json = require('../package.json')//json在它的上級目錄

document.write(json.scripts.server);

運行結果 :

 

可見,網頁中,沒有通過任何第三方loader,即可將json解析並打包成bundle.js。

5.2 Bable


Bable可以使得開發者使用最新的ECMAscript標準來書寫代碼,而不用管新標準是否被當前使用的瀏覽器完全支持。

還是需要單獨安裝Bable的包:

$ npm install --save-dev babel-core babel-loader babel-preset-env


安裝完成後,在webpack.config.js下的module關鍵字下進行配置:

  

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

entry: __dirname + "/app/main.js",

output: {

path: __dirname,

filename: 'bundle.js'

},


devtool: 'eval-source-map',

devServer: {

contentBase: "./public",//本地伺服器所載入的頁面所在的目錄

historyApiFallback: true,//不跳轉

inline: true//實時刷新

},

module: {

rules: [

{

test: /\.js$/, //正則匹配,必須

use: { //使用到的loader

loader: "babel-loader", //loader名

options: { //選項

presets: [ //預先配置

"env"

]

}

},

exclude: /node_modules/ //不包含的目錄或文件

}

]

}

};

 

5.3 CSS文件處理


webpack提供兩個工具處理樣式表,css-loader 和 style-loader,二者處理的任務不同,css-loader使你能夠使用類似@import 和 url(…)的方法實現 require()的功能,style-loader將所有的計算後的樣式加入頁面中,二者組合在一起使你能夠把樣式表嵌入webpack打包後的JS文件中。

同樣先安裝兩個包 style-loader和css-loader

$ npm install --save-dev style-loader css-loader
1
module: {
rules: [
{.......},
{
test: /\.css$/,
use: [
{
loader: "style-loader"
}, {
loader: "css-loader"
}
也可以簡寫:
{
test:/\.css$/.

use:[{

loader:"style!css" //這裡的執行順序是從右往左,css應該在style之前執行

}]
}

 


根目錄下新建 ./src/index.css,寫一個body的背景為green,然後在入口文件main.js中,require(‘../src/index.css’),接著通過命令行$ webpack
此時查看index.html,發現頁面背景已經變成綠色

6.插件plugins


先安裝插件的包:

cnpm install html-webpack-plugin
1
在webpack.config.js中 頭部,引入依賴:

let webpack = require('webpack');
1
然後在webpack.config.js中配置根鍵值對:

plugins: [
new webpack.BannerPlugin('版權所有,翻版必究')
],

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

-Advertisement-
Play Games
更多相關文章
  • 對於大部分安卓或者IOS開發人員來說,App的數據持久化可能是很平常的一個話題。但是對於Web開發人員來說,可能緊緊意味著localStorage和sessionStorage。 Web開發 localStorage和sessionStorage localStorage 和 sessionStor ...
  • Android性能分析工具systrace的使用,能根據需要抓取trace。 瞭解trace文件中數據的含義,能分析簡單的性能問題。 1、systrace簡介 systrace是Android4.1版本之後推出的,對系統Performance分析的工具。 systrace的功能包括跟蹤系統的I/O操 ...
  • Visual Studio 支持 apk 發佈 Visual Studio 支持 apk 發佈 Xamarin.Forms項目或Xamarin.Android項目開發完成之後需要發佈。比較常規的發佈方式是生成 apk 文件,微軟也考慮到開發者有發佈的apk需求,因此在 Visual Studio 2 ...
  • apache 有個開源庫: "commons net" ,這個開源庫中包括了各種基礎的網路工具類,我使用了這個開源庫中的 FTP 工具。 但碰到一些問題,並不是說是開源庫的 bug,可能鍋得算在產品頭上吧,各種奇怪需求。 問題 當將網路限速成 1KB/S 時,使用 commons net 開源庫中的 ...
  • 1 概述 完成 Android 相機預覽功能以後,在此基礎上我使用 dlib 與 opencv 庫做了一個關於人臉檢測的 demo。該 demo 在相機預覽過程中對人臉進行實時檢測,並將檢測到的人臉用矩形框描繪出來。具體實現原理如下: 採用雙層 View,底層的 TextureView 用於預覽,程 ...
  • 這裡記錄怎麼使用storyboard來完成簡單的界面開發,storyboard的使用,從xib到storyboard,iOS界面開發的方式在變化。新建storyboard,拉入viewcontroller,關聯viewcontroller,使用storyboard ...
  • 思考:為什麼網頁中的定義的任何對象、變數和函數,都是以window作為其Global對象 1、任何對象可以是以window作為其全局變數,是因為我們在創建對象的時候,我們可以給屬性賦上window對象 類的定義:對事物的描述 對象的定義:對具有具體屬性(變數)和函數(方法)的承載體 定義對象: 例如 ...
  • 什麼是javascript? JavaScript是web開發中的一種腳本編程語言,也是一種通用的,跨平臺的,基於對象和事件驅動並具有安全性的腳本語言。 JavaScript的主要特點: 解釋性,基於對象,事件驅動,跨平臺,安全性 JavaScript的應用: 驗證用戶輸入的內容,動畫效果,視窗的應... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...