前端代碼構(gòu)建工具

NodeJs

因?yàn)榍岸说臉?gòu)建工具大多基于NodeJs靡狞,所以必須先了解NodeJs

Node 是一個(gè)服務(wù)器程序,有類似于apache的模塊管理功能甸祭。比如說: Apache 能通過添加一個(gè) PHP 模塊來允許開發(fā)人員創(chuàng)建動(dòng)態(tài) Web 頁乾胶,添加一個(gè) SSL 模塊來實(shí)現(xiàn)安全連接。

NodeJS是CommonJS規(guī)范的實(shí)現(xiàn)
CommonJS 定義的模塊分為: 模塊標(biāo)識(module)瓢娜、模塊定義(exports) 、模塊引用(require)

NodeJs特性
  • Node 運(yùn)行基于服務(wù)器上的 V8 JavaScript礼预。
    V8 JavaScript 引擎是 Google 用于其 Chrome 瀏覽器的底層 JavaScript 引擎眠砾,引擎負(fù)責(zé)解釋并執(zhí)行JS代碼。
  • V8 JavaScript引擎
    Google 使用 V8 創(chuàng)建了一個(gè)用 C++ 編寫的超快解釋器托酸,該解釋器擁有另一個(gè)獨(dú)特特征褒颈;您可以下載該引擎并將其嵌入任何應(yīng)用程序。V8 JavaScript 引擎并不僅限于在一個(gè)瀏覽器中運(yùn)行获高。
  • NodeJs基于事件驅(qū)動(dòng)編程
    許多程序員接受的教育使他們認(rèn)為哈肖,面向?qū)ο缶幊淌峭昝赖木幊淘O(shè)計(jì),這使得他們對其他編程方法不屑一顧念秧。Node 使用了一個(gè)所謂的事件驅(qū)動(dòng)編程模型淤井。
    清單 1. 客戶端上使用 jQuery 的事件驅(qū)動(dòng)編程
$("#myButton").click(function(){
     if ($("#myTextField").val() != $(this).val())
         alert("Field must match button text");
});

實(shí)際上,服務(wù)器端和客戶端沒有任何區(qū)別摊趾。沒錯(cuò)币狠,這沒有按鈕點(diǎn)擊操作,也沒有向文本字段鍵入的操作砾层,但在一個(gè)更高的層面上漩绵,事件正在發(fā)生。一個(gè)連接被建立肛炮,這是一個(gè)事件止吐!數(shù)據(jù)通過連接進(jìn)行接收,這也是一個(gè)事件侨糟!數(shù)據(jù)通過連接停止碍扔,這還是一個(gè)事件!

  • 為什么這種設(shè)置類型對 Node 很理想秕重?
    JavaScript 是一種很棒的事件驅(qū)動(dòng)編程語言不同,因?yàn)樗试S使用匿名函數(shù)和閉包,更重要的是,任何寫過代碼的人都熟悉它的語法二拐。事件發(fā)生時(shí)調(diào)用的回調(diào)函數(shù)可以在捕獲事件處進(jìn)行編寫服鹅。這樣可以使代碼容易編寫和維護(hù),沒有復(fù)雜的面向?qū)ο罂蚣馨傩拢瑳]有接口企软,沒有過度設(shè)計(jì)的可能性。只需監(jiān)聽事件饭望,編寫一個(gè)回調(diào)函數(shù)澜倦,其他事情都可以交給系統(tǒng)處理!
NodeJs開發(fā)環(huán)境安裝

nvm是什么杰妓?
學(xué)習(xí)node,首先要安裝node的環(huán)境碘勉,nvm是一款工具巷挥,使用這款工具可以很方便的下載所需版本的node文件以及npm,十分的方便验靡。
NVM可以方便的在同一臺設(shè)備上進(jìn)行多個(gè)node版本之間切換

nvm-windows 最新下載地址:
https://github.com/coreybutler/nvm-windows/releases
nvm install lastest 64  //安裝最新版NodeJs
nvm use 11.4.0           //使用指定版本NodeJs

NPM

NPM 使用介紹

NPM是隨同NodeJS一起安裝的包管理工具倍宾,能解決NodeJS代碼部署上的很多問題,常見的使用場景有以下幾種:

  • 允許用戶從NPM服務(wù)器下載別人編寫的第三方包到本地使用胜嗓。
  • 允許用戶從NPM服務(wù)器下載并安裝別人編寫的命令行程序到本地使用高职。
  • 允許用戶將自己編寫的包或命令行程序上傳到NPM服務(wù)器供別人使用。
為什么需要NPM

當(dāng)一個(gè)網(wǎng)站依賴的代碼越來越多辞州,程序員發(fā)現(xiàn)這是一件很麻煩的事情:
去 jQuery 官網(wǎng)下載 jQuery
去 BootStrap 官網(wǎng)下載 BootStrap
去 Underscore 官網(wǎng)下載 Underscore
……
有些程序員就受不鳥了怔锌,一個(gè)擁有三大美德的程序員 Isaac Z. Schlueter (以下簡稱 Isaaz)給出一個(gè)解決方案:用一個(gè)工具把這些代碼集中到一起來管理吧!
這個(gè)工具就是他用 JavaScript (運(yùn)行在 Node.js 上)寫的 npm变过,全稱是 Node Package Manager

NPM具體步驟

NPM 的思路大概是這樣的:
1.買個(gè)服務(wù)器作為代碼倉庫(registry)埃元,在里面放所有需要被共享的代碼
2.發(fā)郵件通知 jQuery、Bootstrap媚狰、Underscore 作者使用 npm publish 把代碼提交到 registry 上岛杀,分別取名 jquery、bootstrap 和 underscore(注意大小寫)
3.社區(qū)里的其他人如果想使用這些代碼崭孤,就把 jquery类嗤、bootstrap 和 underscore 寫到 package.json 里,然后運(yùn)行 npm install 辨宠,npm 就會幫他們下載代碼
4.下載完的代碼出現(xiàn)在 node_modules 目錄里遗锣,可以隨意使用了。
5.這些可以被使用的代碼被叫做「包」(package)彭羹,這就是 NPM 名字的由來:Node Package(包) Manager(管理器)黄伊。

NPM為什么能流行起來

npm 的發(fā)展是跟 Node.js 的發(fā)展相輔相成的。
Node.js 是由一個(gè)在德國工作的美國程序員 Ryan Dahl 寫的派殷。他寫了 Node.js还最,但是 Node.js 缺少一個(gè)包管理器墓阀,于是他和 npm 的作者一拍即合、抱團(tuán)取暖拓轻,最終 Node.js 內(nèi)置了 npm斯撮。
后來的事情大家都知道,Node.js 火了扶叉。
隨著 Node.js 的火爆勿锅,大家開始用 npm 來共享 JS 代碼了,于是 jQuery 作者也將 jQuery 發(fā)布到 npm 了枣氧。

全局安裝與本地安裝

npm 的包安裝分為本地安裝(local)溢十、全局安裝(global)兩種,從敲的命令行來看达吞,差別只是有沒有-g而已张弛,比如
npm install express # 本地安裝
npm install express -g # 全局安裝
本地安裝

  1. 將安裝包放在 ./node_modules 下(運(yùn)行 npm 命令時(shí)所在的目錄),如果沒有 node_modules 目錄酪劫,會在當(dāng)前執(zhí)行 npm 命令的目錄下生成 node_modules 目錄吞鸭。
  2. 可以通過 require() 來引入本地安裝的包。
    全局安裝
  3. 將安裝包放在 /usr/local 下或者你 node 的安裝目錄覆糟。
  4. 可以直接在命令行里使用刻剥。

使用gulp構(gòu)建less代碼

創(chuàng)建文件gulpfile.js

var gulp = require('gulp');
less = require('gulp-less');

gulp.task('default', async ()=>{
    gulp.src('src/less/index.less')
    .pipe(less())
    .pipe(gulp.dest('dist/css'));   
});

裝備好less文件,執(zhí)行編譯命令

npm install gulp
npm install gulp-less --save-dev
gulp

附A:NodeJs入門示例

hello.js

function hello(){
    console.log('hello nodejs');
}
hello();

執(zhí)行: node hello.js
helloserver.js

var httpmodule=require('http');

httpmodule.createServer(
  function(req,res){
    res.writeHead(200,{'Content-Type':'text/html'});
    res.end('<h1>Hello Nodejs</h1>');
  }
).listen(80,'127.0.0.1');

執(zhí)行: node helloserver.js

附B:CommonJS示例

CommonJS規(guī)范
foo.js

'use strict';
var x = 5;
function addx (value){
    console.log( x + value );
}
module.exports.addx = addx;

main.js

'use strict'

var example = require('./foo.js');
example.addx(10);
//輸出:11 
module.exports.$ = example;

執(zhí)行node main.js

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滩字,一起剝皮案震驚了整個(gè)濱河市造虏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌麦箍,老刑警劉巖酗电,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異内列,居然都是意外死亡撵术,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門话瞧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫩与,“玉大人,你說我怎么就攤上這事交排』蹋” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵埃篓,是天一觀的道長处坪。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么同窘? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任玄帕,我火速辦了婚禮,結(jié)果婚禮上想邦,老公的妹妹穿的比我還像新娘裤纹。我一直安慰自己,他們只是感情好丧没,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布鹰椒。 她就那樣靜靜地躺著,像睡著了一般呕童。 火紅的嫁衣襯著肌膚如雪漆际。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天夺饲,我揣著相機(jī)與錄音灿椅,去河邊找鬼。 笑死钞支,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的操刀。 我是一名探鬼主播烁挟,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼骨坑!你這毒婦竟也來了撼嗓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤欢唾,失蹤者是張志新(化名)和其女友劉穎且警,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體礁遣,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斑芜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祟霍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杏头。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沸呐,靈堂內(nèi)的尸體忽然破棺而出醇王,到底是詐尸還是另有隱情,我是刑警寧澤崭添,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布寓娩,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棘伴。R本人自食惡果不足惜寞埠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望排嫌。 院中可真熱鬧畸裳,春花似錦、人聲如沸淳地。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颇象。三九已至伍伤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間遣钳,已是汗流浹背扰魂。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蕴茴,地道東北人劝评。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像倦淀,于是被迫代替她去往敵國和親蒋畜。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353