快樂Node程式設計師的10個習慣

ourjs發表於2014-03-18

  JavaScript出現近二十年了,但由於其有些問題不能解決,使得像Python和Ruby這一類的語言很吸引人,這些問題包括命令列介面、互動式開發環境、包的管理和沒有一個有組織開源社群等。幸虧Node.js和npm,使得JavaScript的現狀有了明顯改善。網路程式設計師正使用強大的新工具,這使他們可以做他們想到的任何事情。

  下面是一個讓你的快樂和讓你程式很好工作的小技巧清單。 

  1、用npm init開始你的程式

  npm包括一個用init命令建立一個package.json檔案的過程。儘管你也許很熟悉package.json極其屬性,但是npm init仍然是一個很方便的方法讓你的新的節點應用程式(node app)或模組開始走上正軌。它為你智慧地進行預設設定,就像從其父目錄推斷模組名稱,從~/.npmrc中讀取作者資訊,或者是使用你的git設定來確定repository。

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

  2、宣告所有的依賴關係

  每次你在本地安裝一個模組,使用--save或者是--save-dev是一個很好的習慣。這些標記把給定的模組增加到你的package.json的dependencies或devDependencies的列表中,並且它會使用一個合理的預設的semver range

npm install domready --save

  注意現在npm使用的caret-style semver ranges :

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

  3、指定一個啟動指令碼

  在package.json中為scripts.start設定一個值以便允許你在命令列中用npm start來開啟你的app。這是一個很好的要去遵守的慣例,這樣這可以讓任何的節點開發人員來拷貝你的app並沒有任何問題地執行。

  Bonus:如果你在你的package.json中定義了scripts.start,那麼你就不需要Procfile了。正如web process使用npm start時Procfile將自動地被建立出來。

  這有一個開啟script的例子

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

  4、指定一個測試指令碼

  就像你團隊中任何人都應該能執行你的程式一樣,他們也應該都能測試它。在package.json 中的scripts.test欄位是用來指定一個指令碼來執行測試的。如果你正在使用如mocha一類的東西來進行測試,請確保在package.json中包含它,並且要指明這是你本地專案的位元組檔案而不是已經發布的mocha。

"scripts": {
  "test": "mocha"
}

  5、避免程式碼的依賴關係

  許多節點app使用依賴於C的npm模式,像bson、ws、和hiredis,他們必須為HeroKu的64位Linux系統架構重新編譯。這個編輯編譯過程很費時。為了使這個過程儘可能快,下載過和編譯後HeroKu在節點建立快取以便在後續使用中被重複使用。這個快取意味著佔用更少的網路流量進行更少的編譯。忽略node_modules也是npm模組作者推薦的做法。

echo node_modules >> .gitignore

  6、使用環境變數配置npm

  來自npm配置文件

  任何以npm_config_開始的環境變數將被解釋成一個配置引數。例如,把npm_config_foo=bar放在你的環境變數中將把foo放到bar的配置引數中。任何沒有被初始化的環境變數將被設定成true。配置值不區分大小寫,因此NPM_CONFIG_FOO=bar也能同樣的工作。

  正如最近被改變的一樣,在所有的HeroKu框架中app環境變數設定都是有效地。這種改變使得HeroKu的節點使用者可以控制他們的npm的配置,並且不需要改變他們的程式程式碼。第七個習慣是一個極好的例項。

  7、帶著你自己的npm登錄檔

  最近幾年公開的npm註冊增長的很快,但這伴隨著一些不穩定因素。結果很多的節點使用者正尋找可替換的辦法,為了同時提高開發週期開發穩定性,或者是為了建立自己的私人節點模組。NodejitsuGemfury提供付過費的私人登錄檔,並且有一些免費的替代品,例如Mozilla's read-only S3/CloudFront mirrorMaciej Ma?ecki's European mirror.配置你的Heroku節點應用程式來使用一個自定義註冊中心是很容易的:

heroku config:set npm_config_registry=http://registry.npmjs

  8、跟蹤過時的依賴關係

  如果你已經從事程式設計很久了,你可能是dedependency hell。幸運的是Node.js和npm都會對改變進行說明,通過Semantic Versioning Specification。在這種情況下,版本號和他們改變了的實現方式能傳達出從一個版本到另一個版本底層是如何實現的。

  npm有一個鮮為人知的命令outdated。使用npmupdate,這是一個很好的工具來檢測你的app的依賴關係是否已經過時並且需要升級。

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

  如果你工作在開源的節點app或模式上,檢查david-dmNodeICO、和shields.io這三大服務,它提供圖形包,你能使用它們顯示你的工程的README或者是website。

  9、使用npm指令碼執行自定義構建步驟

  隨著npm的發展,出現了自動開發構建過程。Grunt是迄今為止世界上最流行的構建工具,但是新工具如gulp.jsplain old npm scripts也同樣吸引具有吸引力。

  當你部署一個節點qpp到HeroKu上,執行npm install --production命令來確保你的app的npm 依賴包被下載和安裝。這個命令有時也可以做其他的事情。它執行你在package.json檔案中定義的npm script hooks,例如preinstall和postintall。下面是一個例子:

{
  "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命令,或者是參考command-line executables。你也可以參考其他的npm 指令碼:

{
  "scripts": {
    "postinstall": "npm run build && npm run rejoice",
    "build": "grunt",
    "rejoice": "echo yay!",
    "start": "node index.js"
  }
}

  10、嘗試新的東西

  Harmony是ES6工作集名字,下一個ECMAScript語言的版本就是人們熟知的JavaScript。Harmony給JavaScript帶來了大量的令人興奮的功能,其中有許多在新一點的版本中已經可以使用了。

  Harmony實現了許多新功能像block scopinggeneratorsproxiesweak maps等。

  為了在你的節點app中實現新功能,尤其是一個新版本像0.11.x,在你的啟動指令碼中加入--harmony吧:

{
  "scripts": {
    "start": "node --harmony index.js"
  },
  "engines": {
    "node": "0.11.x"
  }
}

  11、Browserify

  客戶端的JavaScript有一個“麵條式程式碼”的遺留問題,但語言本身不是這樣的。缺乏正當的依賴管理使得我們陷入jQuery-plugin copy-pasta這種狀態長達數年。多虧了npm,我們正在進入前端復興:npm註冊的瘋狂,在瀏覽器中模式設計的盛行是驚人的。

  Browserify是一個了不起的工具,使得節點設計模式能在瀏覽器中工作。如果你是一個前端開發人員,browserify可以改變你的生活。也許不是今天,也許不是明天,但就在不遠的將來了。開始使用browserify吧,檢視文章

  你的習慣是什麼呢?

  無論你是否已經在node上程式設計一段時間了或者是僅僅剛剛開始,都希望你找到有用的方法。

  原文 blog.heroku.com
 

相關文章