在前面所有的文章中,我們都是在圍繞網頁的三部分,結構(HTML)、表現(CSS)、行爲(JS)分離的方式來介紹的,傳統的前端,就是在html檔案中引入css檔案和js檔案(包含jQuery之類的js庫),來實現web應用的一部分,通常包括:
這時候前端在WEB專案中,並不涉及太多的業務邏輯,通常程式碼最後要交給後端來實現與伺服器的互動,前端的崗位在專案中通常是面目模糊的,甚至一個前端會同時跟幾個專案,在專案組中不被重視,後端往往覺得前端只是專案的附屬品,幹着 乾着簡單又費時費力的工作。
新手理解HTML、CSS、javascript之間的關係
但隨着web業務日益複雜化,一個Web專案不再是幾個網頁(WebPage)那麼簡單,而是一個執行在網際網路上的複雜的Web應用(WebApp)了。一個複雜的Web應用,必然需要多人共同作業完成,前端專注於用戶端,後端專注於伺服器端,前後端通過API互動;對於負責的業務,前端與前端的共同作業在傳統時代是一個麻煩事,怎麼提高工作效率、怎麼維護程式碼、怎麼提高程式碼品質、怎麼迭代升級,傳統時代一個前端寧可從頭再來,也不願接手別人的程式碼,可見這有多困難。
前端工程化指使用軟體工程的技術和方法來進行前端專案的開發、維護和管理,前端工程化的引入,讓前端開發能脫離對後端專案的依賴,看起來像一個獨立的專案。這是一個很大的話題,並沒有一個準確的定義。
如前面講到的ES6的模組化,VUE中的元件,都是前端工程化的表現形式,實現前端工程化涉及到的技術很多。
如開發時要脫離後端,讓專案跑起來,需要Nodejs,實現模組化管理和資源管理需要webpack,實現程式碼版本管理需要Git等等。
無論怎樣,提到前端工程化首先要說一說Node.js
Node.js 是一個基於 Chrome V8 引擎的 JavaScript 執行環境
,是一個讓 JavaScript 執行在伺服器端的開發平臺。
在此之前JavaScript 的宿主環境只有瀏覽器,如下面 下麪的js程式碼,需要script標籤,插入到HTML中才能 纔能被瀏覽器識別,並被其js引擎解釋執行
console.log("Hello World");
安裝Nodejs只需要根據自己的操作系統,到官網下載安裝合適的版本即可,假設把Nodejs安裝到了D槽根目錄,可以在命令列視窗執行這個程式碼
伺服器可以監聽用戶端的請求,類似於Apache、Nginx 等搭建HTTP 伺服器
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8888);
console.log('Server running at http://127.0.0.1:8888/');
把上面面的程式碼儲存到server.js中,在命令列視窗執行,效果見下圖
在瀏覽器中輸入提示的網站,頁面將會列印出Hello World
說白了Nodejs是Javascript的另一個宿主環境,有了Node之後,js的地位從前端的指令碼語言,變成了一門前後端通吃的語言,隨着js的版本升級,js將會越來越重要,成爲傳統後端不得不正視的程式語言。
說到這裏,大家可能會產生一個疑問,雖然js可以在伺服器端執行,但作爲前端如果我們不做全棧,與我們又有什麼關係呢?不可能我們掌握了js的語法規則就能成爲全棧工程師吧?
這是因爲我們雖然不做伺服器端,但要用到nodejs的模組和包。
模組
是Node.js 應用程式的基本組成部分,Node.js的模組系統很簡單,和ES6模組化思路相同,每個 Node.js 檔案都被視爲一個獨立的模組(包括JS檔案,JSON文字檔案,二進制模組檔案);
和ES6模組化不同,Nodejs採用CommonJS規範,提供 exports 和 require 兩個物件, exports 是向外公開模組的介面,require是從外部獲取模組的介面。
包
用於管理多個模組以及依賴關係,可以對多個模組進行封裝,包的根目錄必須包含package.json檔案,package.json檔案是CommonJS規範用於描述包的檔案。
模組和包是沒有本質區別的,兩個概念也時常混用。
大名鼎鼎的NPM(Node Package Manager)是隨同NodeJS一起安裝的包管理工具,npm本身也是Node.js的一個模組。
NPM的含義有兩層,一個是NPM伺服器,NPM伺服器網址爲http://npmjs.org,NPM是 Node 包的標準發佈平臺,用於 Node 包的發佈、傳播;
另一個是NPM命令NPM CLI,指在命令列視窗或終端使用NPM命令來管理node包(模組),開發者可以使用NPM命令下載、安裝、升級、刪除包等。
npm init
初始化一個包的package.json 檔案這個命令相當於在當前目錄初始化一個node專案,執行後,會在當前目錄下生成一個package.json檔案,這個檔案定義了該專案所需要的各種模組,以及專案的設定資訊(比如名稱、版本、許可證等元數據)。
npm init -y可以跳過選擇,快速生成
package.json 檔案的部分設定項
npm run XXX
就可以執行這段指令碼,比如 「start」: 「node server.js」, 執行 npm run start 就是執行 「node server.js」。npm install
安裝一個依賴包 , 簡寫 npm i
直接使用 npm install xxx安裝的模組是會自動寫入 package.json 的依賴 (dependencies),等同於 npm install xxx --save, 如果同時安裝多個依賴包用空格隔開;
額外加個參數:
–save,縮寫爲-S,表示安裝的包將寫入package.json裏面的dependencies。
–global,縮寫爲-g,全域性安裝一個包。安裝之後的包將位於系統預設的目錄之下。
–save-dev,縮寫爲-D,表示將安裝的包將寫入packege.json裏面devDependencies。
現在我們來新建一個專案,並且本地安裝webpack
1、在D槽,新建一個資料夾npm-demo
2、初始化一個package.json檔案,在命令列視窗執行npm init,完成後npm-demo目錄下會生成package.json檔案
3、在命令列視窗執行 npm install webpack
npm-demo目錄下新增了一個node_modules資料夾,它是用來存放用NPM下載安裝的包的資料夾;
package.json檔案中的dependencies設定項,已經寫入了webpack依賴
實際上因爲webpack只在開發環境使用,所以只需要把他安裝爲開發依賴,可以嘗試解除安裝webeck,執行npm install webpack,再重新安裝npm install webpack --save-dev
這時候package.json檔案中會出現新的設定項devDependencies
"devDependencies": {
"webpack": "^4.44.1"
}
本地安裝
全域性安裝
npm run
執行一個自定義指令碼的命令npm 可以在專案package.json裏面自定義指令碼命令,package.json檔案中的欄位script的每一個屬性都是一個自定義的指令碼命令。npm 的 scripts 有4個內建的縮寫命令:
npm test 等價於 npm run test
npm start 等價於 npm run start
npm restart等價於 npm run restart
npm stop等價於 npm run stop
npm config
管理npm的組態檔npm的組態檔是一個.npmrc檔案,並不存放在nodejs的安裝目錄中
config命令主要包含增、刪、改、查幾個步驟,config支援以下子命令:
npm config list 顯示所有設定設定
npm config set <key> <value> 將設定鍵設定爲值,如由於npm伺服器在國外,下載速度較慢,將倉庫源設定爲淘寶映象
npm config set registry https://registry.npm.taobao.org
在nodejs的安裝目錄D: \nodejs下,新建node_global和node_cache兩個資料夾,設定node_global爲全域性模組存放路徑,設定node_cache爲快取資料夾。
npm config set prefix "D:\nodejs\node_global"
npm config set cache "D:\nodejs\node_cache"
npm config get <key> 檢視某設定項,如:
npm config get registry
npm config edit 直接修改組態檔
npm config delete <key> 刪除某設定項
npm --version
檢視npm 當前安裝的版本 簡寫:npm -v
npm uninstall
解除安裝當前目錄下的某個包, 簡寫npm un
npm update
更新當前目錄下的某個包npm docs xxx
檢視某個包文件npm list
檢視當前目錄下安裝的所有的包,npm list -g 檢視全域性安裝包路徑下的所有包npm --help
可檢視所有命令 簡寫:npm -h
npm help xxx
檢視某條命令的詳細幫助 ,如:npm help runnpm view xxx version
檢視當前包的版本資訊,如:npm view webpack versionnpm search
搜尋軟體包