【问题标题】:npm not creating ./node_modules for own local install packagenpm 没有为自己的本地安装包创建 ./node_modules
【发布时间】:2013-04-03 17:46:07
【问题描述】:

我正在研究一个使用 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 文件夹并按照previous question 中的建议重新安装了 NPM。文件如下:

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

【问题讨论】:

    标签: node.js npm


    【解决方案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());
    

    【讨论】:

    • 感谢您在开发包时阐明 name: 的使用。此外,我在开发软件的目录中运行 NPM,这是问题所在。按照您的建议,我移到了另一个目录并整理出了 name: - 一切正常 - 谢谢。
    • 啊,我明白了。是的,在项目的工作目录中运行 npm install 将安装项目 package.json 的依赖项部分中列出的模块。由于您的 package.json 没有依赖项,因此没有安装任何内容,也没有创建 node_modules 目录。很高兴听到现在一切正常。
    猜你喜欢
    • 2014-02-08
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多