轉:快樂Node碼農的十個習慣

文章來源於:http://www.infoq.com/cn/articles/node.js-habitshtml

從問世到如今將近20年,JavaScript一直缺少其它有吸引力的編程語言,好比Python和Ruby,的不少優勢:命令行界面,REPL,包管理器,以及組織良好的開源社區。感謝Node.js和npm,現現在的JavaScript鳥槍換炮了。Web開發者有了強大的新工具,接下來就看他們的想象力了。前端

下面這個提示和技巧清單,能讓你和你的node程序保持快樂。node

1. 用npm init開始新項目

npm有個init命令,能夠引導你完成建立package.json文件的過程。即使你很是熟悉package.json和它的屬性,也能夠把npm init看成將你的新程序或模塊導入正軌的簡便辦法。 它能夠聰明地爲你設置默認值,好比經過上層目錄的名稱推斷模塊名,從~/.npmrc中讀取創做者的信息,以及用你的git設置肯定代碼庫。git

 
mkdir my-node-app
cd my-node-app
npm init

2.聲明全部依賴項

在將模塊安裝到項目本地時堅持使用--save (或 --save-dev)是個好習慣。這些選項會將指定的模塊添加到package.json的dependencies(或devDependencies)清單中,並使用合理的默認semver範圍es6

npm install domready --save

注意,如今npm使用插入符風格的semver範圍github

"dependencies": {
  "domready": "^1.0.4"
}

3.指定啓動腳本

在package.json中設定scripts.start,你就能夠在命令行中用npm start啓動程序了。這個很是方便,由於克隆了你的程序的其餘node開發人員不用猜就能輕鬆運行它。web

額外獎勵:若是在package.json中定義了scripts.start,你就不須要Procfile了(Heroku平臺用Procfile來聲明在你程序的dynos上運行什麼命令)。使用npm start會自動建立一個做爲web進程的Procfile。redis

這裏有個啓動腳本示例:express

"scripts": {
  "start": "node index.js"
}

4.指定測試腳本

就像團隊中的全部人都應該能夠運行程序同樣,他們也應該能夠測試它。package.json中的scripts.test就是用來指定運行測試套件的腳本的。若是你用mocha之類的東西運行測試,必定要確保把它包含在package.json裏的devDependencies中,而且指向安裝在你項目本地的文件,而不是全局安裝的mocha:npm

"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註冊中心。NodejitsuGemfury提供收費的私有註冊中心,此外也有一些免費的,好比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-dmNodeICOshields.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,請參閱這些文章

你有哪些習慣?

無論你已經作過一段時間node程序,仍是剛剛開始,咱們都但願這些小技巧能對你有所幫助。若是你有一些(健康的)node習慣想要跟你們分享,請在發tweet時帶上#node_habits標籤。編碼快樂!

做者簡介

本文最初由Zeke sikelianos發表在Heroku上。Zeke在Heroku工做,用ruby和coffeescript編寫開源軟件。他從事設計師這一職業已經有14年了,信奉信息自由的精神,而且相信用計算機能夠創造出美好的事物。

查看英文原文:What’s New in Node.js v0.12 – Running Multiple Instances in a Single Process


感謝吳海星對本文的策劃。

相關文章
相關標籤/搜索