node.js - 'npm install -g ' 到底是做什么的?

标签 node.js npm sinopia

我想使用 sinopia 设置一个私有(private)的 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 文件;怎么会这样?所有的东西 I found inside sinopia 是关于 JavaScript 的。

npm install 有什么作用?在我看来,它应该只启动一些下载过程。

最佳答案

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

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

  2. 运行 pre-install , installpost-install自身及其每个依赖项的脚本。参见 Lifecycle Scripts

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

就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

在控制台中

关于node.js - 'npm install -g ' 到底是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34408154/

相关文章:

node.js - 安装 sinopia npm 后无法正常工作

node.js - 强尼五号 : board not ready

mysql - 如何在 Node.js 中动态创建数据库连接?

javascript - 在 POST Express 中使用隐藏输入

javascript - 为什么我的 AJAX 每两分钟调用一次?

javascript - NPM 脚本命名约定

node.js - 通过 NodeJS 获取/查看内存和 CPU 使用情况

typescript - 无法解析模块 'module://graphql/language/parser.js'