程式設計師使用Node的十個技巧
從問世到現在將近20年,JavaScript一直缺乏其它有吸引力的程式語言,比如Python和Ruby,的很多優點:命令列介面,REPL,包管理器,以及組織良好的開源社群。感謝Node.js和npm,現如今的JavaScript鳥槍換炮了。Web開發者有了強大的新工具,接下來就看他們的想象力了。
下面這個提示和技巧清單,能讓你和你的node程式保持快樂。
1. 用npm init開始新專案
npm有個init命令,可以引導你完成建立package.json檔案的過程。即便你非常熟悉package.json和它的屬性,也可以把npm init當作將你的新程式或模組匯入正軌的簡便辦法。 它可以聰明地為你設定預設值,比如通過上層目錄的名稱推斷模組名,從~/.npmrc中讀取創作者的資訊,以及用你的git設定確定程式碼庫。
mkdir my-node-app cd my-node-app npm init
2.宣告所有依賴項
在將模組安裝到專案本地時堅持使用--save (或 --save-dev)是個好習慣。這些選項會將指定的模組新增到package.json的dependencies(或devDependencies)清單中,並使用合理的預設semver範圍。
npm install domready --save
注意,現在npm使用插入符風格的semver範圍:
"dependencies": { "domready": "^1.0.4" }
3.指定啟動指令碼
在package.json中設定scripts.start,你就可以在命令列中用npm start啟動程式了。這個非常方便,因為克隆了你的程式的其他node開發人員不用猜就能輕鬆執行它。
額外獎勵:如果在package.json中定義了scripts.start,你就不需要Procfile了(Heroku平臺用Procfile來宣告在你程式的dynos上執行什麼命令)。使用npm start會自動建立一個作為web程式的Procfile。
這裡有個啟動指令碼示例:
"scripts": { "start": "node index.js" }
4.指定測試指令碼
就像團隊中的所有人都應該可以執行程式一樣,他們也應該可以測試它。package.json中的scripts.test就是用來指定執行測試套件的指令碼的。如果你用mocha之類的東西執行測試,一定要確保把它包含在package.json裡的devDependencies中,並且指向安裝在你專案本地的檔案,而不是全域性安裝的mocha:
"scripts": { "test": "mocha" }
5.不要把依賴項放在原始碼的版本控制中
很多node程式使用的npm模組帶有C語言寫的依賴項,比如bson、ws和hiredis,這些依賴項必須在Heroku的64位Linux架構下進行編譯。編譯過程可能非常耗時。為了讓構建過程儘可能的快,Heroku的node buildpack在下載和編譯完依賴項後會快取它們,以便在後續部署中重用。這個快取是為了降低網路流量並減少編譯次數。
忽略node_modules目錄也是模組創作者推薦的npm實踐。應用程式和模組之間少了一個區別!
echo node_modules >> .gitignore
6.用環境變數配置npm
以下內容摘自npm配置:
所有以npm_config_開頭的環境變數都會被解釋為配置引數。比如說環境中有npm_config_foo=bar時,會將配置引數foo設定為bar。任何沒有給出值的環境配置的值都會設定為true。配置值對大小寫不敏感,所以NPM_CONFIG_FOO=bar也一樣。
最近在所有的Heroku構建中都有程式的環境。這一變化讓Heroku上的node使用者無需修改程式程式碼就可以控制他們的npm配置。習慣#7是這一方式的完美例證。
7.帶著你自己的npm註冊中心
最近幾年公共npm註冊中心出現了突飛猛進式的增長,因此會偶爾不穩定。所以很多node使用者開始尋求公共註冊中心之外的方案,他們或者是出於開發和構建過程中速度及穩定性方面的考慮,或者是因為要放置私有的node模組。
最近幾個月冒出了一些可供選擇的npm註冊中心。Nodejitsu和Gemfury提供收費的私有註冊中心,此外也有一些免費的,比如Mozilla的只讀S3/CloudFront映象和Maciej Małecki的歐洲映象。
在Heroku上配置node程式使用定製註冊中心很容易:
heroku config:set npm_config_registry=http://registry.npmjs.eu
8.追蹤過期的依賴項
如果你程式設計的時間足夠長,可能已經領教過相依性地獄的厲害了。好在Node.js和npm接納了semver,即 語義化版本管理規範 ,設定了一個健全的依賴項管理先例。在這個方案下,版本號和它們的變化方式傳達的含義涉及到了底層程式碼,以及從一個版本到下一版本修改了什麼。
npm有一個很少有人知道的命令,outdated。它可以跟npm update結合使用,能夠找出程式的那些依賴項已經過期了,需要更新:
cd my-node-app npm outdated Package Current Wanted Latest Location ------- ------- ------ ------ -------- express 3.4.8 3.4.8 4.0.0-rc2 express jade 1.1.5 1.1.5 1.3.0 jade cors 2.1.1 2.1.1 2.2.0 cors jade 0.26.3 0.26.3 1.3.0 mocha > jade diff 1.0.7 1.0.7 1.0.8 mocha > diff glob 3.2.3 3.2.3 3.2.9 mocha > glob commander 2.0.0 2.0.0 2.1.0 mocha > commander
如果你做的是開源的node程式或模組,可以看看david-dm,NodeICO和shields.io,你可以用這三個優秀服務所提供的圖片徽章在專案的README或網站上顯示生動的依賴資訊。
9.用npm指令碼執行定製的構建步驟
隨著npm生態系統的持續增長,開發和構建過程的自動化選擇也會隨之增長。Grunt是迄今為止node世界中最流行的構建工具,但像gulp.js這種新工具,以及普通的老式npm指令碼也因為較輕的負載受到歡迎。
在你把node程式部署到Heroku上時,要執行npm install --production命令以確保程式的npm依賴項會被下載下來裝上。但那個命令也會做其它事情:它會執行你在package.json檔案中定義的所有npm指令碼鉤子,比如preinstall和postinstall。這裡有個樣本:
{ "name": "my-node-app", "version": "1.2.3", "scripts": { "preinstall": "echo here it comes!", "postinstall": "echo there it goes!", "start": "node index.js", "test": "tap test/*.js" } }
這些指令碼可以是行內bash命令,或者也可以指向可執行的命令列檔案。你還可以在指令碼內引用其他npm指令碼:
{ "scripts": { "postinstall": "npm run build && npm run rejoice", "build": "grunt", "rejoice": "echo yay!", "start": "node index.js" } }
10.嘗試新東西
ES6,也就是被大眾稱為JavaScript的ECMAScript語言規範的下一版,其工作名稱為Harmony。 Harmony給JavaScript帶來了很多振奮人心的新特性,其中很多已經出現在較新版本的node中了。
Harmony實現了很多新特性,比如塊作用域、生成器、代理、弱對映等等。
要在你的node程式中啟用harmony的特性,需要指定一個比較新的node引擎,比如0.11.x,並在啟動指令碼中設定--harmony選項:
{ "scripts": { "start": "node --harmony index.js" }, "engines": { "node": "0.11.x" } }
11. Browserify
客戶端JavaScript有亂如麻團般的遺留程式碼,但那並不是語言本身的錯。由於缺乏合理的依賴項管理工具,讓jQuery-外掛拷貝-粘帖的黑暗時代延續了好多年。感謝npm,帶著我們步入了前端振興的年代:npm註冊中心像野草一樣瘋長,為瀏覽器設計的模組也呈現出了驚人的增長勢頭。
Browserify是一個讓node模組可以用在瀏覽器中的神奇工具。如果你是前端開發人員,browserify將會改變你的人生。可能不是今天,也不是明天,但不會太久。如果你想開始使用browserify,請參閱這些文章。
相關文章
- 一個程式設計師使用 PPT 的小技巧程式設計師
- 程式設計師程式設計的10個實用技巧程式設計師
- 勾搭程式設計師的 11 個技巧程式設計師
- 程式設計師程式設計面試取勝的8個技巧程式設計師面試
- 有關程式設計師的十個預言程式設計師
- 程式設計師應該知道的 13 個設計技巧程式設計師
- 程式設計師獲取新程式設計技能的5個技巧?程式設計師
- 一個十幾年程式設計師給所有新老程式設計師的忠告程式設計師
- 偉大程式設計師的十個特質程式設計師
- 優秀程式設計師的十個習慣程式設計師
- 自由程式設計師的3個開發技巧程式設計師
- 程式設計師加薪的技巧程式設計師
- 快樂Node程式設計師的10個習慣程式設計師
- 優秀程式設計師都在注意的十個點程式設計師
- 程式設計師:提高程式設計效率的技巧程式設計師
- 成為專業程式設計師的6個技巧程式設計師
- 成為專業程式設計師的 6 個技巧程式設計師
- 程式設計師面試技巧程式設計師面試
- 程式設計師必看的書(十)程式設計師
- 程式設計師的十層樓程式設計師
- 每個程式設計師都會的 35 個 jQuery 小技巧程式設計師jQuery
- 每個程式設計師都會的35個jQuery小技巧程式設計師jQuery
- 美女程式設計師觀點:程式設計師最重要的非程式設計技巧程式設計師
- 十個Python程式設計師易犯的錯誤Python程式設計師
- 一個老程式設計師的十年回顧程式設計師
- 成為優秀程式設計師的十個有效方法程式設計師
- 成為優秀程式設計師的十個Tips程式設計師
- Python 程式設計師最常犯的十個錯誤Python程式設計師
- Python 程式設計師需要知道的 30 個技巧Python程式設計師
- 老鳥程式設計師才知道的40個小技巧程式設計師
- 程式設計師應該掌握的10個搜尋技巧程式設計師
- JavaScript程式設計師需要掌握的5個debug技巧JavaScript程式設計師
- JavaScript程式設計師必備的5個debug技巧JavaScript程式設計師
- 十個必備的設計師APPAPP
- 每個程式設計師都需要了解的一個SQL技巧程式設計師SQL
- 程式設計師的十層樓(3)程式設計師
- 程式設計師的十層樓(2)程式設計師
- 程式設計師的十層樓(1)程式設計師