究竟是什么' npm安装-g'做?

时间:2015-12-22 03:51:55

标签: node.js npm sinopia

我想使用sinopia建立一个私人的npm注册表,然后我执行了'npm install -g sinopia'。 但是有些错误信息如下所示。

> crypt3@0.1.8 install /usr/local/lib/node_modules/sinopia/node_modules/crypt3
> node-gyp rebuild

gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/.node-gyp/4.2.3"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/local/lib/node_modules/sinopia/node_modules/crypt3/.node-gyp"
make: Entering directory `/usr/local/lib/node_modules/sinopia/node_modules/crypt3/build'
  CXX(target) Release/obj.target/crypt3/crypt3.o
In file included from ../crypt3.cc:7:0:
../node_modules/nan/nan.h:261:25: error: redefinition of âtemplate<class T> v8::Local<T> _NanEnsureLocal(v8::Local<T>)â
 NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Local<T> val) {
                         ^
../node_modules/nan/nan.h:256:25: error: âtemplate<class T> v8::Local<T> _NanEnsureLocal(v8::Handle<T>)â previously declared here
 NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Handle<T> val) {
                         ^
../node_modules/nan/nan.h:661:13: error: ânode::smallocâ has not been declared
     , node::smalloc::FreeCallback callback
             ^

我可以看到与C或C ++相关的.h文件,为什么会发生这种情况,因为我发现sinopia中的所有内容都是关于javascript的。这是gitbhub的位置。https://github.com/rlidwka/sinopia

所以我想知道&#39; npm install&#39;从那时起我认为它只会做一些下载过程。

非常感谢。

3 个答案:

答案 0 :(得分:6)

npm install <package>npm install -g <package>

  1. 下载您使用参数指定的npm包,或者在package.json文件中,以及它在node_modules文件夹中的依赖项(来自您定义的npm存储库主机)。 (或使用已有的本地副本。请参阅shrink-wrapping

  2. 为自己和每个依赖项运行pre-installinstallpost-install脚本。请参阅Lifecycle Scripts

  3. -g指令告诉npm将包安装在全局共享node_modules文件夹中(通常是节点所在的位置)。这也允许您从命令行访问模块,因为bin符号链接到PATH文件夹(通常是usr / local / bin)。请查看此link

  4. 在sinopia的情况下,他们没有标准package.json文件,他们有一个package.yaml文件。查看yamp plugin

    如果您检查其预发布脚本,则其中包含

    prepublish: js-yaml package.yaml > package.json
    

    将package.yaml转换为package.json。在他们的package.json中,他们依赖于crypt3包。

    对于crypt3(sinopia依赖项之一),请检查package.json。它包含

      "scripts": {
        "test": "node test/test.js",
        "install": "node-gyp rebuild"
      },
    

    因此,当sinopia安装了npm时,它也将下载并安装它的所有依赖项。安装crypt3后,将运行“node-gyp rebuild”,这就是您在控制台中看到本机c / c ++编译输出的原因。

    你可以自己尝试

    npm install -g node-gyp && node-gyp rebuild
    

    在控制台中

答案 1 :(得分:2)

g中的npm install -g是一个标志,表示您要在系统范围内(全局)安装特定的npm模块。如果没有g选项,模块将在本地安装在名为node_modules的当前目录中。

全局安装的软件包的位置可能因安装节点的方式而异。通过在命令行中键入npm list -g,找出它们的安装位置。

编辑:您的错误可能是由于npm根目录中的权限不足引起的,但也可能是该库不支持您正在使用的节点版本。检查您需要运行node的{​​{1}}版本,并确保您的节点版本与该版本匹配(crypt3)。如果它与所需版本不匹配,您可以使用节点版本管理器(例如nvm)切换到该版本,然后再次尝试node -v

答案 2 :(得分:1)

npm install -g <package-name>尝试将软件包安装到系统范围的node_modules目录中(对于Mac,这将是"/usr/local/lib/node_modules"