2014-03-06 71 views
8

我正在實現一個Node模塊,我希望用戶可以選擇性地將require的某些文件作爲模塊的一部分。例如:Node.js(npm)訪問已安裝模塊中的文件

var M = require('my-module'); 
var Foo = require('my-module/foo'); 

考慮到我的模塊結構是這樣的:

./my-module 
    +- lib 
    | +- foo 
    | | +- index.js 
    | +- index.js 
    +- package.json 

這是基本的package.json文件:

{ 
    "name": "my-module", 
    "version": "0.0.1", 
    "description": "My very own super fun module.", 
    "main": "lib/index.js" 
} 

注意:不必要的按鍵被省略清晰度,例如:dependencies,keywords,author

如何修改package.json以允許此「功能」?

+0

nodeload有類似的東西,你可以從lib文件夾中加載模塊 - https://github.com/benschmaus/nodeload –

回答

4

你的模塊結構改成這樣:

./my-module 
    +- lib 
    | +- foo 
    | | +- index.js 
    | +- index.js 
    +- index.js 
    +- foo.js 
    +- package.json 

甚至更​​好,改變require('my-module/foo')require('my-module').Foo像大多數模塊做。

在package.json中設置main是一個錯誤的事情(因爲package.json是npm自己的元數據,不應該與node.js有任何關係,例如考慮從bower安裝包),所以反正你不應該用這個。

+0

實際上,Node會檢查package.json文件中的'main'鍵,然後加載該文件模塊。 – Scimonster

+0

是的。但它**要求** package.json存在,並且是有效的JSON,這是不必要的,並非總是如此。 – alex

+0

同意。但只要你有package.json,使用它就沒有什麼錯誤,對吧? – Scimonster