2014-03-06 70 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