Webpack前端打包工具

一、安裝

??安裝Webpack之前需要安裝nodejs,然后用npm安裝:

$ npm install webpack -g

?&nsbp;運行以上命令就將Webpack安裝到了全局環境中。
??但是通常我們會將Webpack只安裝到項目的依賴中:

$ cd /www/webpack_demo1      // 進入項目目錄,確保該目錄下存在有package.json文件,該文件之后會講到
$ npm install webpack --save-dev  // 安裝webpack依賴

二、使用

??首先創建一個index.html和entry.js文件:

// index.html
<html>
<head><meta charset="utf-8"> </head> <body> <script src="bundle.js"></script> // 注意這里是bundle.js不是entry.js </body> </html>
// entry.js
document.write('It works.')

??然后編譯 entry.js 并打包到 bundle.js:

$ webpack entry.js bundle.js

??然后用瀏覽器打開會看到It works
??接下來添加一個模塊module.js,并修改入口entry.js:

// module.js
module.exports = 'It works from module.js.'
// entry.js
document.write('It works.') document.write(require('./module.js')) // 添加模塊

??然后重新打包 webpack entry.js bundle.js 刷新頁面可以看到變化 It?works.It?works from module.js.
??Webpack 會分析入口文件,解析包含依賴關系的各個文件。這些文件(模塊)都打包到 bundle.js 。Webpack 會給每個模塊分配一個唯一的 id 并通過這個 id 索引和訪問模塊。在頁面啟動時,會先執行 entry.js 中的代碼,其它模塊會在運行 require 的時候再執行。

三、Loader

??Webpack本身只能處理js模塊,如果要加載css\img...等靜態資源就需要使用Loader轉換
??Loader可以理解為模塊和資源的加載器,它本身是一個函數,接受源文件為參數然后轉換并返回。這樣我們就可以通過require加載任何類型的模塊或文件。 ??Loader的特性:

  • 可以通過管道方式鏈式調用,每個 loader 可以把資源轉換成任意格式并傳遞給下一個 loader ,但是最后一個 loader 必須返回 JavaScript。
  • Loader 可以同步或異步執行。
  • Loader 運行在 node.js 環境中,所以可以做任何可能的事情。
  • Loader 可以接受參數,以此來傳遞配置項給 loader。
  • Loader 可以通過文件擴展名(或正則表達式)綁定給不同類型的文件。
  • Loader 可以通過 npm 發布和安裝。
  • 除了通過 package.json 的 main 指定,通常的模塊也可以導出一個 loader 來使用。
  • Loader 可以訪問配置。
  • 插件可以讓 loader 擁有更多特性。
  • Loader 可以分發出附加的任意文件。

??慣例loader一般是xxx-loader格式,eg: css-loader。在引用loader的時候可以使用簡寫: json-loader可以寫json。
??Loader可以在require()引用模塊的時候添加,也可以在webpac全局配置中進行綁定,還可以通過命令行的方式使用。
??下面來說明下loader怎么用 ??我們在頁面中引入一個style.css文件,首頁將style.css看成一個模塊,使用css-loader讀取它,再用style-loader把它插入到頁面

/* style.css */
body { background: blue; }

??修改entry.js

require("!style-loader!css-loader!./style.css") // 載入 style.css document.write('It works.') document.write(require('./module.js'))

??安裝loader:

$ npm install css-loader style-loader // 我在這里安裝的時候貌似報了個錯,后邊加-g指定全局安裝就好了

??重新編譯打包可以看到頁面背景顏色發生了變化
??如果每次require CSS文件的時候都要寫loader前綴,很麻煩,我們可以根據模塊類型(擴展名)來自動綁定需求的loader。
??將entry.js中的require("!style!css!./style.css") 修改為require("./style.css"),然后執行:

$ webpack entry.js bundle.js --module-bind 'css=style-loader!css-loader'// 有些環境下可能需要使用雙引號
$ webpack entry.js bundle.js --module-bing "css=style-loader!css-loader"

??這兩種方式效果是一樣的。

四、配置文件

??Webpack處理在命令行中指定參數還可以通過制定配置文件來執行。默認情況下會搜索當前目錄的webpack.config.js文件,這個文件是一個node.js模塊,返回一個json格式的配置信息對象,或通過 --config 選項來指定配置文件。

??在項目中創建package.json(package.json是一個標準的npm說明文件,里面蘊含了豐富的信息,包括當前項目的依賴模塊,自定義的腳本任務等等。在終端中使用npm init命令可以自動創建這個package.json文件)來添加webpack需要的依賴:

{"name": "webpack-example","version": "1.0.0", "description": "A simple webpack example.", "main": "bundle.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ "webpack" ], "author": "orlion", "license": "MIT", "devDependencies": { "css-loader": "^0.21.0", "style-loader": "^0.13.0", "webpack": "^1.12.2" } }

??然后運行:

npm install

??然后創建一個配置文件webpack.config.js:

var webpack = require('webpack')module.exports = { entry: './entry.js', output: { path: __dirname, filename: 'bundle.js' }, module: { loaders: [ {test: /\.css$/, loader: 'style-loader!css-loader'} ] } }

??同時簡化entry.js與style.css加載方式:

require('./style.css')

五、插件

??插件可以完成loader不能完成的功能
??插件的使用一般是在webpack的配置信息plugins選項中指定。
??Webpack本身內置了一些常用的插件,下面我們利用BannerPlugin內置插件來演示一下。這個插件的作用是給輸出的文件頭部添加注釋信息
??修改webpack.config.js,添加plugins:

var webpack = require('webpack')module.exports = { entry: './entry.js', output: { path: __dirname, filename: 'bundle.js' }, module: { loaders: [ {test: /\.css$/, loader: 'style-loader!css-loader'} ] }, plugins: [ new webpack.BannerPlugin('This file is created by zhaoda') ] }

??然后運行webpack,打開bundle.js。可以看到文件頭部出現了我們指定的注釋信息:

/*! This file is created by zhaoda */
/******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; ...

轉載于:https://www.cnblogs.com/orlion/p/6532960.html

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

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

相關文章

動態語言靜態化

一、什么是動態語言靜態化 將現有PHP等動態語言的邏輯代碼生成為靜態html文件,用戶訪問動態腳本重定向到靜態html的過程 注 : 對實時性要求不高的頁面才適合去做動態語言靜態化 二、為什么要靜態化 1. 動態腳本通常會做邏輯計算和數據查詢,訪問量越大,服務器壓力越大 2. 訪…

WPF-06 樣式(Style)

在我們前面介紹資源的時候&#xff0c;我們提到了樣式表&#xff0c;如果你之前是做Web開發的&#xff0c;你會發現Style有點類似于Web中的CSS。控件級別樣式我們可以在控件級別定義自己的樣式&#xff0c;控件級別的樣式是優先級最高的<Window x:Class"Example_06.Sel…

構建Squid代理服務器-傳統代理、透明代理、反向代理

Squid是Linux系統中最常用的一款開源代理服務軟件&#xff0c;主要提供緩存加速和應用層過濾控制的功能&#xff0c;可以很好的實現HTTP、FTP、DNS查詢以及SSL等應用的緩存代理。 正向代理&#xff1a;根據實現的方式不同&#xff0c;代理服務可分為傳統代理和透明代理。 傳統代…

Struts2之初識

Struts2教程 第一章 初識Struts2 主頁&#xff1a;http://struts.apache.org/ 優勢&#xff1a;用戶請求&#xff0c;模塊處理&#xff0c;頁面展現。適用于企業級開發&#xff0c;便于維護。 配置&#xff1a;web.xml中添加的核心控制器 <filter> <filter-name>St…

數據庫緩存層

一 常見的緩存形式 : 1.文件緩存 (為了避免I/O開銷,盡量使用內存緩存) 2.內存緩存 二 為什么要使用緩存 緩存數據是為了讓客戶端很少甚至不訪問數據庫服務器進行的數據查詢,高并發下,能最大程度降低對數據庫服務器的訪問壓力 一般的數據請求: 用戶請求->數據查詢->…

python面試題~反射,元類,單例

1 什么是反射&#xff1f;以及應用場景&#xff1f; test.py def f1():print(f1) def f2():print(f2) def f3():print(f3) def f4():print(f4) a 1 復制代碼import test as ss ss.f1() ss.f2() print(ss.a) 復制代碼我們要導入另外一個模塊,可以使用import.現在有這樣的需求,我…

僅有50Mb大小的cli即可搞定大廠才能玩的CloudIDE丨SmartIDE

作者&#xff1a;徐磊&#xff0c;開源云原生SmartIDE創始人、LEANOSFT創始人/首席架構師/CEO&#xff0c;微軟最有價值專家MVP/微軟區域技術總監Regional Director&#xff0c;華為云最有價值專家。從事軟件工程咨詢服務超過15年時間&#xff0c;為超過200家不同類型的企業提供…

idea-spark-sbt 打包jar

1、打開idea下的terminal窗口 2、只打包部分項目 sbt insight-import/clean insight-import/assembly 這表示只打包主目錄下的insight-import項目 &#xff0c;先清理&#xff08;clean&#xff09;再打包&#xff08;assembly&#xff09;不能用package&#xff0c;這個不會打…

操作Checkbox標簽

在前端開發中&#xff0c;少不了對Checkbox的操作。 常用的的方法有2個&#xff1a;.is()和.prop()方法。前者是判斷 checkbox的狀態&#xff0c;選不是未選。而后者為checkbox設置一個值&#xff0c;可以設置checkbox是true還是false。寫個小例子&#xff0c;練習一下&#xf…

memcache在項目中的應用

一 安裝memcache 具體流程這篇文章有寫到: 點擊 鏈接 二 在項目中應用memcache 為了減輕數據庫的查詢壓力,所以我們把一些不經常變動的數據進行緩存,用戶查詢時,如果查詢的要求是一樣的,我們就memcache緩存中讀取數據并返回去,如果查詢要求變了,我們再到數據庫中查詢,并將查…

點擊回退按鈕刷新頁面

瀏覽器用戶返回上一步&#xff0c;自動刷新window.οnunlοadfunction(){} 這個最簡單粗暴 方式一、<input type"hidden" id"refreshed" value"no"><script type"text/javascript">οnlοadfunction(){var edocument.getE…

Dapr 證書過期了怎么辦? 別慌,有救!

一、背景Dapr 默認證書有效時間是1年&#xff0c;證書過期后就不能執行相關控制面和數據面的交互了&#xff0c;如下圖&#xff1a;二、查看證書有效時間通過dapr mtls expiry 看到期時間&#xff0c;具體參見命令https://v1-7.docs.dapr.io/reference/cli/dapr-mtls/dapr-mtls…

python數據類型之間的轉換

對python內置的數據類型進行轉換時&#xff0c;可以使用內置函數&#xff0c;常用的類型轉換函數如下 python常用類型轉換函數函數格式使用示例描述int(x [,base])int("8") 可以轉換的包括String類型和其他數字類型&#xff0c;但是會丟失精度 float(x) float…

js高級程序設計的筆記(一)

2019獨角獸企業重金招聘Python工程師標準>>> 1.js中的 null : 如果只意在保存對象的變量還沒有真正的保存對象之前&#xff0c;就需要先把該變量保存 null值&#xff0c; null代表空對象的指針 2.函數的參數對象 arguments的理解。 argument對象的length屬性 實例 f…

Redis在PHP項目中的應用

一 運行redis服務端 出現上圖的圖形,就說明redis服務端開啟成功,并且開啟了密碼功能(如果不加載配置文件,連接redis是不需要密碼的,這樣,會給我們的程序帶來很大隱患) 密碼的設置: 在redis配置文件中,搜索requirepass ,后面設置密碼 比如 : requirepass G506myredis 則表示此…

Linux關機、重啟命令

關機shutdown -h 0 #<O秒后關機shutdown -h now #<現在關機shutdown -h 10 #<10分鐘后關機shutdown -h 23:20 #<23&#xff1a;20分關機shutdown -c #<取消shutdown關機命令init 0 #<立馬關機&#xff08;切換運行級別為0&#xff0c;推薦使用&#xff09;ha…

Python 模塊之 string.py

用法 字符串常量&#xff1a; import string print(string.ascii_lowercase) print(string.ascii_uppercase) print(string.ascii_letters) print(string.digits) print(string.hexdigits) print(string.octdigits) print(string.punctuation) print(string.printable)結果 abc…

md5和password_hash孰好孰壞

md5自不必說,想必所有phper都用過,但另一個加密函數不知道你見過沒有 他就是password_hash(); 加密方式更全面.使用起來也比md5salt這種方式要簡潔很多,最主要的是難破解,因為它每時每刻都在變動 它的使用方式大致是這樣 1. 用戶注冊時提交過來密碼,我們對用戶密碼進行加密…

Logstash 命令行參數

Logstash 提供了一個 shell 腳本叫 logstash 方便快速運行。它支持以下參數&#xff1a; -e意即執行。我們在 “Hello World” 的時候已經用過這個參數了。事實上你可以不寫任何具體配置&#xff0c;直接運行 bin/logstash -e ” 達到相同效果。這個參數的默認值是下面這樣&…