2013-04-11 64 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

相關問題