2

我正在研究一个使用 C++ 开发 Nodejs 扩展的Hello World示例。一切正常,我可以运行该示例。但是我想使用require('hello')而不是require('./build/Release/hello')我知道需要将文件放在node_modules文件夹中。当我按照有关使用NPM Install本地安装软件包的说明进行操作时,不会创建文件夹node_modules(经过几个小时我已经开发了一种解决方法,但它是一团糟)。

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

包.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": ""
}

绑定.gyp

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

你好.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 的新手,因此我将不胜感激地收到任何关于如何改进未来问题的指导。

4

1 回答 1

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());
于 2013-04-11T14:26:50.727 回答