2013-04-11 65 views
2

我正在通过使用C++开发Nodejs扩展的Hello World示例。一切正常,我可以运行这个例子。然而我想用require('hello')而不是require('./ build/Release/hello')我知道需要将文件放在node_modules文件夹中。当我按照有关使用NPM安装的说明来本地安装软件包时,并未创建文件夹node_modules(经过许多小时,我开发了一种解决方法,但它很混乱)。npm不为自己的本地安装包创建./node_modules

我使用的是Mac OS Mountain Lion和NPM 1.2.17版。 NPM从本地和全局安装存储库中的软件包(并卸载),没有任何问题。我检查了NPM根目录,它指向一个node_modules文件夹并重新安装了NPM,如previous question中所建议的。该文件如下:

的package.json

{ 
    "name": "HelloWorld", 
    "version": "1.0.0", 
    "description": "Nodejs Extension using C++", 
    "main": "./build/Release/hello.node", 
    "scripts": { 
    "preinstall": "node-gyp rebuild", 
    "preuninstall": "rm -rf build/*" 
    }, 
    "repository": "", 
    "readmeFilename": "README.md", 
    "author": "", 
    "license": "" 
} 

binding.gyp

{ 
    "targets": [ 
    { 
     "target_name": "hello", 
     "sources" : [ "src/hello.cc" ] 
    } 
    ] 
} 

hello.cc

#include <node.h> 
#include <v8.h> 

using namespace v8; 


Handle<Value> Method(const Arguments& args) { 
    HandleScope scope; 
    return scope.Close(String::New("Hello, World!")); 
} 

void init(Handle<Object> exports) { 
    exports ->Set(String::NewSymbol("hello"), 
    FunctionTemplate::New(Method)->GetFunction()); 
} 

NODE_MODULE(hello, init) 

我觉得我缺少一些简单的东西,因为我缺乏使用NPM的经验,因此将不胜感激任何帮助。

另外,我是Stack Overflow的新手,因此任何有关如何改进任何未来问题的指导都将非常感激。

回答

1

包的名称由package.json中的name属性确定。你有它的方式设置将与

`require("HelloWorld")` 

工作,你有

`"name": "HelloWorld"` 

如果你希望它是

`require("hello")` 

简单地改变你的package.json文件有

`"name": "hello"` 

到你的安装问题 - 你如何以及在哪里运行npm install?我创建了一个与HelloWorld相同级别的HelloWorldClient目录并运行

`npm install ../HelloWorld/` 

哪些工作正常。我的客户端代码(改变为hello包名之后)的工作,以及: test.js:

var hello = require('hello'); 
console.log(hello.hello()); 
+0

感谢澄清使用**名:**开发一个软件包时。另外,我在开发软件的目录中运行NPM,这是问题所在。遵循你的建议,我搬到了不同的目录,并整理了**名称:** - 一切正常 - 谢谢。 – David 2013-04-11 18:09:59

+0

啊,我明白了。是的,在项目的工作目录中运行npm install将安装项目package.json的依赖项部分中列出的模块。由于你的package.json没有依赖关系,所以没有安装任何东西,也没有创建node_modules目录。很高兴听到它现在正在工作。 – 2013-04-11 18:49:51

相关问题