nodejs開發(fā)和部署工具

nodemon 開發(fā)環(huán)境

在開發(fā)環(huán)境下乓梨,往往需要一個工具來自動重啟項目工程卿拴,node 有一個 npm 模塊 supervisior 也是用來監(jiān)控進程的庄拇,不過除了 supervisior 外墓阀,還有很多其他的工具,從 github 的評分上看渊胸,比較熱門的有 forever,nodemon台妆,node-dev翎猛,具體這些工具的區(qū)別可以參考這篇文章 Comparison: Tools to Automate Restarting Node.js Server After Code Changes,個人覺得在開發(fā)環(huán)境還是用 nodemon接剩,因為配置比較方便切厘,文檔也很清晰。所以這里先主要講 nodemon懊缺。
nodemon的安裝:

npm install -g nodemon

安裝完nodemon后疫稿,就可以用nodemon來代替node來啟動應(yīng)用

nodemon [your node app] (相當(dāng)于 node [your node app])

如果沒有在應(yīng)用中指定端口,可以在命令中指定:

nodemon ./server.js localhost 8080

可以運行debug模式:

nodemon --debug ./server.js 80

查看幫助,幫助里面有很多選項都是一目了然:

nodemon -h 或者 nodemon -help

nodemon 比較流行的原因之一就是它的可配置性比較高遗座,下面是官網(wǎng)給出的配置文件 nodemon.json 的例子舀凛,加上我自己了解到的有用的一些配置,開發(fā)環(huán)境建議可以把每個參數(shù)都寫上備用途蒋,生產(chǎn)環(huán)境就把沒有必要的參數(shù)去掉猛遍,有些字段是可以在命令行模式以參數(shù)形式給出的,可以通過 -h 查看号坡,下面逐個解釋:

{
    "restartable": "rs",
    "ignore": [
        ".git",
        "node_modules/**/node_modules"
    ],
    "verbose": true,
    "execMap": {
        "": "node"
        "js": "node --harmony"
    },
    "events": {
        "restart": "osascript -e 'display notification \"App restarted due to:\n'$FILENAME'\" with title \"nodemon\"'"
    },
    "watch": [
        "test/fixtures/",
        "test/samples/"
    ],
    "env": {
        "NODE_ENV": "development",
        "PORT": "3000"
    },
    "ext": "js json",
    "legacy-watch": false
}

restartable:重啟的命令懊烤,默認是 rs ,可以改成你自己喜歡的字符串宽堆。當(dāng)用 nodemon 啟動應(yīng)用時奸晴,可以直接鍵入 rs 直接重啟服務(wù)。除了字符串值外日麸,還可以設(shè)置 false 值寄啼,這個值的意思是當(dāng) nodemon 影響了你自己的終端命令時,設(shè)置為 false 則不會在 nodemon 運行期間監(jiān)聽 rs 的重啟命令代箭。
ignore:忽略的文件后綴名或者文件夾墩划,文件路徑的書寫用相對于 nodemon.json 所在位置的相對路徑,下同嗡综。nodemon 會默認忽略一些文件乙帮,默認忽略的文件有:.git, node_modules, bower_components, .sass-cache,如果這些文件想要加入監(jiān)控极景,需要重寫默認忽略參數(shù)字段 ignoreRoot察净,比如加入:"ignoreRoot": [".git", "bower_components", ".sass-cache"],然后在 watch 中將 node_modules 文件路徑加入監(jiān)控盼樟,那么 node_modules 內(nèi)的文件也加入了監(jiān)控了氢卡。
verbose:true 表示輸出詳細啟動與重啟信息。
execMap:運行服務(wù)的后綴名和對應(yīng)的運行命令晨缴,"js": "node --harmony" 表示用 nodemon 代替 node --harmony 運行 js 后綴文件译秦;"" 指 www 這些沒有后綴名的文件;默認的 defaults.js 配置文件會識別一些文件:py: 'python',rb: 'ruby'击碗。

events:這個字段表示 nodemon 運行到某些狀態(tài)時的一些觸發(fā)事件筑悴,總共有五個狀態(tài):

  • start - 子進程(即監(jiān)控的應(yīng)用)啟動

  • crash - 子進程崩潰,不會觸發(fā) exit

  • exit - 子進程完全退出稍途,不是非正常的崩潰

  • restart - 子進程重啟

  • config:update - nodemon 的 config 文件改變

狀態(tài)后面可以帶標(biāo)準輸入輸出語句阁吝,比如 mac 系統(tǒng)下設(shè)置: "start": "echo 'app start'",那么啟動應(yīng)用時會輸出 app start 信息械拍,其他類似命令如 ls突勇,ps 等等標(biāo)準命令都可以在這里定義装盯。除此之外,也可以寫js來監(jiān)控与境,github 上有介紹: events.md验夯,不過我試過之后沒有成功,如果有懂的朋友摔刁,記得在評論不吝賜教挥转。_

watch:監(jiān)控的文件夾路徑或者文件路徑。

env:運行環(huán)境 development 是開發(fā)環(huán)境共屈,production 是生產(chǎn)環(huán)境绑谣。port 是端口號。

ext:監(jiān)控指定后綴名的文件拗引,用空格間隔借宵。默認監(jiān)控的后綴文件:.js, .coffee, .litcoffee, .json。但是對于沒有文件后綴的文件矾削,比如 www 文件壤玫,我暫時找不到怎么用 nodemon 去監(jiān)控,就算在 watch 中包含了哼凯,nodemon 也會忽略掉欲间。

注:關(guān)于監(jiān)控以及忽略文件修改有個順序的問題,或者說優(yōu)先級断部,首先 nodemon 會先讀取 watch 里面需要監(jiān)控的文件或文件路徑猎贴,再從文件中選擇監(jiān)控 ext 中指定的后綴名,最后去掉從 ignore 中指定的忽略文件或文件路徑蝴光。

legacy-watch:nodemon 使用 Chokidar 作為底層監(jiān)控系統(tǒng)她渴,但是如果監(jiān)控失效,或者提示沒有需要監(jiān)控的文件時蔑祟,就需要使用輪詢模式(polling mode)趁耗,即設(shè)置 legacy-watch 為 true,也可以在命令行中指定:

$ nodemon --legacy-watch
$ nodemon -L # 簡寫

有幾個比較少用到的配置字段:

1)colous:輸出信息顏色標(biāo)示做瞪。

2)runOnChangeOnly:true 時運行 nodemon www 項目不會啟動对粪,只保持對文件的監(jiān)控,當(dāng)監(jiān)控的文件有修改并保存時才會啟動應(yīng)用装蓬,其他沒有影響。默認是 false 即一開始就啟動應(yīng)用并監(jiān)控文件改動纱扭。

3)stdin牍帚,stdout:這個是關(guān)于標(biāo)準輸入輸出的設(shè)置,上文提到 nodemon.json 文件中的 events 字段可以為狀態(tài)設(shè)置標(biāo)準輸入輸出語句乳蛾,如果這里設(shè)置了 false暗赶,標(biāo)準輸入輸入語句就會實效鄙币。

github 上給出了一個 faq.js 解答了一些常見的問題,有的上文已經(jīng)提到蹂随,還有一些比較常見的列舉如下:

1)當(dāng)自己的應(yīng)用啟動服務(wù)帶的參數(shù)和 nodemon 沖突時十嘿,可以利用下面的方法來解決沖突:

$ nodemon app.js -- -L -opt2 -opt3

以 -- 為分隔,nodemon 不會去讀取 -- 后面的參數(shù)岳锁,而是傳給 app.js绩衷。

2)當(dāng)應(yīng)用因為某些原因奔潰時,nodemon 不會自動重啟激率,會輸出以下信息:

[nodemon] app crashed - waiting for file changes before starting...

這個時需要修改文件并保存后 nodemon 才會重啟應(yīng)用咳燕,這在開發(fā)環(huán)境沒什么關(guān)系,但是如果想把 nodemon 放在線上時乒躺,我們往往希望 nodemon 能夠自動重啟崩潰的應(yīng)用招盲,這個時候就需要 forever 來輔助了,有一個 issue 專門講這個問題嘉冒。使用 forever 來重啟 nodemon 時曹货,在 nodemon 啟動時需要加個參數(shù) --exitcrash:

nodemon www --exitcrash

這樣當(dāng)應(yīng)用崩潰后,nodemon 會自動中斷退出讳推,forever 檢測到 nodemon 退出后就會重啟 nodemon顶籽,nodemon 又會重啟應(yīng)用。其他就是 forever 的配置了娜遵,因為這里只講 nodemon蜕衡,所以就不涉及 forever,到時候總結(jié) forever 的時候再講设拟,感興趣的看這里慨仿。

3)如果想通過 npm start 命令來啟動應(yīng)用同時又想用 nodemon 來監(jiān)控文件改動,可以修改 npm 的 package.js 文件中的 scripts.start:

"scripts": {
    "start": "nodemon ./bin/www"
}

那么用 npm start 啟動后就是執(zhí)行 nodemon ./bin/www纳胧。

pm2 生成環(huán)境

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末镰吆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子跑慕,更是在濱河造成了極大的恐慌万皿,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件核行,死亡現(xiàn)場離奇詭異牢硅,居然都是意外死亡,警方通過查閱死者的電腦和手機芝雪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門减余,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惩系,你說我怎么就攤上這事位岔∪缟福” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵抒抬,是天一觀的道長杨刨。 經(jīng)常有香客問我,道長擦剑,這世上最難降的妖魔是什么妖胀? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮抓于,結(jié)果婚禮上做粤,老公的妹妹穿的比我還像新娘。我一直安慰自己捉撮,他們只是感情好怕品,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巾遭,像睡著了一般肉康。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上灼舍,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天吼和,我揣著相機與錄音,去河邊找鬼骑素。 笑死炫乓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的献丑。 我是一名探鬼主播末捣,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼创橄!你這毒婦竟也來了箩做?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤妥畏,失蹤者是張志新(化名)和其女友劉穎邦邦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體醉蚁,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡燃辖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了网棍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郭赐。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖确沸,靈堂內(nèi)的尸體忽然破棺而出捌锭,到底是詐尸還是另有隱情,我是刑警寧澤罗捎,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布观谦,位于F島的核電站,受9級特大地震影響桨菜,放射性物質(zhì)發(fā)生泄漏豁状。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一倒得、第九天 我趴在偏房一處隱蔽的房頂上張望泻红。 院中可真熱鬧,春花似錦霞掺、人聲如沸谊路。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缠劝。三九已至,卻和暖如春骗灶,著一層夾襖步出監(jiān)牢的瞬間惨恭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工耙旦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脱羡,地道東北人。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓免都,卻偏偏與公主長得像锉罐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子琴昆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容