自己獨自一個人邊學(xué)邊做苦囱,不斷完善。其間經(jīng)歷了很多曲折脾猛,走了很多彎路撕彤,浪費了很多時間,但是我收獲了很多∶退現(xiàn)在回頭看看羹铅,對自己的工作成果做一個簡單的總結(jié),紀念自己小小的成就愉昆。
1.搭建node-express項目职员。
我知道可以用命令創(chuàng)建項目,先安裝express的包跛溉。npm install express焊切,然后再用express的命令創(chuàng)建項目。我直接用了IDE芳室,webstorm創(chuàng)建項目专肪,選擇express APP,然后項目就搭建完成了堪侯。而且還貼心的幫你安裝了一些模塊嚎尤。
2.啟動項目
簡單的方法:node app.js
好的方法:supervisor app.js
優(yōu)點:
(1)監(jiān)控文件,文件有改動時自動重啟項目伍宦。這讓調(diào)試功能變得十分方便芽死,在沒有發(fā)現(xiàn)這個插件之前,我自己真是浪費了大把光陰在無數(shù)次重啟項目這個簡單的操作上雹拄。
(2)項目崩潰之后會自動嘗試重啟收奔。這對于項目的穩(wěn)定性很重要,如果因為未考慮到的原因倒是項目掛掉了滓玖,迅速的重啟能快速的恢復(fù)服務(wù)坪哄。
安裝方法很簡單:npm install supervisor 。建議全局安裝這樣會使用比較方便:npm install -g supervisor
這個插件的原理比較簡單势篡,大家自己也可以寫一個换衬。
3.改變程序的啟動端口
這個比較簡單亡脑,直接修改listen的端口即可。需要保證端口沒有被占用;
var server=app.listen(8888, function(){console.log('this server running at port: 8888');});
4.jade模板特點
(1)標(biāo)簽只寫前半部分镰官,且不需要尖括號。
(2)class用 . 表示矿微,ID用#表示,完全符合CSS選擇器的語法隶糕。其他屬性寫在括號里。例如:
div#test.hello(name="testdiv")
(3)div標(biāo)簽可以不寫站玄,默認就是div元素枚驻。
.test === <div class="test" ></div.
(4)可以將代碼片段保存為模板,模板可以被其他jade文件引用株旷。
有兩種方式:extends 集成其他模板的樣式內(nèi)容再登。 include 引用其他模板的片段代碼。
extends layout //繼承l(wèi)ayout模板的樣式
block script //script 塊
? ?script(src='/javascripts/test.min.js') //script 元素
block header
? include navBar //引入代碼塊
(5)jade十分苛求縮進格式晾剖,要求必須縮進2位以此來表明層級結(jié)構(gòu)锉矢。模板引擎給我們帶來方便的同時也帶來了要求,但是有IDE的幫助齿尽,這點小問題還是很好解決的沽损。
(6)如果你有HTML需要轉(zhuǎn)成jade模板,不用手寫了雕什。網(wǎng)上有現(xiàn)成的工具能把HTML轉(zhuǎn)換成jade缠俺,也能把jade轉(zhuǎn)換成HTML。
(7)jade模板支持傳入變量贷岸,這個功能我并沒有充分利用壹士,相信可以借鑒react的經(jīng)驗,會玩的很棒的偿警。
5.腳本壓縮工具uglify-js
項目不免使用較多的js腳本躏救,但是如果腳本較大的話會影響頁面的加載速度,形成性能的瓶頸螟蒸,所以對腳本進行壓縮可以說是必備的操作盒使。除了可以提高加載速度外,壓縮代碼還能混淆代碼七嫌,保證功能正常使用的情況下避免代碼‘太過容易’的泄露少办。
安裝方法很簡單: ?npm install -g uglifyjs?
使用方法有很多,一是直接使用诵原。
uglifyjs a.js b.js -o min.js
將腳本a,b合并壓縮后輸出到min.js中英妓。-o是指定輸出目錄。其他參數(shù)可以使用uglifyjs --help命令或者查看readme.md文檔绍赛。
另外可以調(diào)用API接口minify蔓纠。我是把它和fs模塊結(jié)合使用,使用腳本自動對指定目錄下的所有JS文件進行壓縮并命名吗蚌。分享一下代碼:
var fs=require('fs');
var uglifyjs=require("uglify-js");
var files=fs.readdirSync('./');
files.forEach(function(itm) {
//排除部分不需壓縮的文件
if(itm.indexOf('.')==0||itm.indexOf('$')==0||itm.indexOf('min')>-1||itm.indexOf('compress')>-1||!fs.lstatSync(itm).isFile()){
}else{
varresult=uglifyjs.minify(itm,{
mangle:true//是否混淆代碼
});
varnewName= itm.split('.')[0]+'.min.js';
//壓縮返回的結(jié)果是對象腿倚,壓縮的代碼在code屬性中
fs.writeFile(newName,result.code,function(err) {
if(err) {
throwerr;
}else{
console.log('write '+newName+' successfully');
}
});
}
});
還可以使用自動構(gòu)建工具,grunt蚯妇,glup敷燎,webpack都可以暂筝。
6.