2014-03-19 51 views
52

我已經完成了相當多的搜索。但是,仍然懷疑Node.js的package.json中的主要參數。Node.js package.json主要參數

  1. 如何填補這個領域的幫助?以另一種方式提問,如果此字段存在,我可以以不同的樣式啓動模塊嗎?
  2. 我可以將多個腳本填充到主參數中嗎?如果是的話,他們會以兩條線程開始嗎?如果不是,我該如何在模塊中啓動兩個腳本並讓它們並行運行?

我知道第二個問題很奇怪。這是因爲我在OpenShift上託管了一個Node.js應用程序,但該應用程序由兩個主要組件組成。一個是REST API,另一個是通知傳遞服務。

我擔心通知傳遞過程會阻塞REST API,如果它們作爲單個線程實現的話。但是,他們必須連接到相同的MongoDB盒式磁帶。此外,如果可能的話,兩個部件都可以在同一個齒輪上工作,我想節省一個齒輪。

歡迎任何建議。

回答

73

the npm documentation

主要領域是一個模塊ID,它是主入口點到你的 程序。也就是說,如果你的軟件包被命名爲foo,並且用戶安裝了它,然後確實需要(「foo」),那麼你的主模塊的出口 對象將被返回。

這應該是一個模塊ID相對於您的包的根文件夾 文件夾。

對於大多數模塊來說,使用主腳本和 通常沒有其他更多的意義。

說得簡短:

  1. 你只需要在一個main參數你package.json如果切入點,以你的包在其根文件夾index.js不同。例如,人們通常將入口點設置爲lib/index.jslib/<packagename>.js,在這種情況下,相應的腳本必須在package.json中描述爲main
  2. 因爲必須明確定義入口點require('yourpackagename'),所以不能有兩個腳本作爲main
+0

謝謝,那麼我會考慮實施組件作爲一個子進程。 – Gavin

22

要回答你的第一個問題,您加載一個模塊的方式取決於模塊的入口點和主參數package.json

比方說,你有以下文件結構:

my-npm-module 
|-- lib 
| |-- module.js 
|-- package.json 

沒有在的package.json主要參數,你必須給模塊入口點加載模塊:require('my-npm-module/lib/module.js')

如果設置了的package.json主要參數如下"main": "lib/module.js",你將能夠加載模塊是這樣的:require('my-npm-module')

6

main關鍵的一個重要功能是它提供了入口點的路徑。這與nodemon一起工作時非常有用。如果您有nodemon工作,你定義main關鍵在你package.json爲let說"main": "./src/server/app.js",那麼你可以簡單地殺青了作爲替代nodemon ./src/server/app.js PWD 使用CLI root用戶輸入nodemon服務器。

7

如果您在package.json文件中有比如:

{ 
"name": "zig-zag", 
"main": "lib/entry.js", 
... 
} 

lib/entry.js會的主入口點到你的包。 當調用

require('zig-zag');

在節點

lib/entry.js將所需的實際文件。

+0

因此,如果代碼不是要導入的,我們可以忽略'main'參數嗎? – Kokodoko