2014-11-15 79 views
0

有沒有辦法用nodejs創建一個可以用其他參數啓動的應用程序? 舉幾個例子:用某些設置啓動nodejs應用程序?

node myApp.js -nolog 

將開始使用自定義noLog=true參數的應用程序,這樣的事情不會console.logged ..

node myApp.js -prod 

將啓動應用程序在一組特定的生產設置。

我不確定節點中是否有任何等價物。如果這是重複的,可能是因爲我甚至沒有意識到要搜索此特定問題的答案的關鍵字。

給我啓發!

+1

嘗試https://github.com/substack/node-optimist解析的argv,並使用'require'加載不同的設置。 – CodeColorist

+0

@ChiChou似乎被棄用,但這是一個很好的方向!謝謝! – Mia

+0

結帳Yargs樂觀主義者的繼任者! https://github.com/chevex/yargs –

回答

1

要讀取命令行參數,你需要分析process.argv,或者使用第三方模塊狀minimist

var argv = require('minimist')(process.argv.slice(2)); 

// do something ... 
var config = argv.config; 
if (config === 'dev') { 
    // set the flag 
} 

通過node app.js --config=dev然後開始你的應用程序。

在大多數情況下,您需要包含多個選項,並且在代碼中手動硬編碼是一個壞主意。推薦的方法是將它們寫入配置文件中,然後使用require進行分析。您可以同時使用.js.json來存儲配置,但.js更方便,因爲JSON格式太嚴格,特別是它甚至不允許您放置註釋。

所以這裏有一個解決方案。整理你的配置如下:

config 
    ├── dev.js 
    ├── production.js 

production.js被定義爲「基礎類」,它存儲了所有必要的設置,並使用module.export暴露。

module.exports = { 
    db: { 
     backend: 'mysql', 
     user: 'username', 
     password: 's3cr3t' 
     // ... 
    } 
}; 

dev.js繼承所有屬性從生產,重寫,以適應當地的ENV值。建議在版本控制系統(git,SVN等)中忽略此文件,以便您的本地配置不會與項目中的其他人發生衝突。要深度複製和合並對象,node.extend可能會有所幫助。

var base = require('./production'), 
    extend = require('node.extend'); 

var overrides = { 
    db: { 
     user: 'root', 
     password: '' 
    } 
}; 

module.exports = extend(overrides, base); 
相關問題