首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'npm install -g‘到底是做什么的?

'npm install -g‘到底是做什么的?
EN

Stack Overflow用户
提问于 2015-12-22 11:51:55
回答 3查看 13K关注 0票数 9

我想使用sinopia设置一个私有的npm注册表,并执行了npm install -g sinopia,但出现了一些错误消息:

代码语言:javascript
复制
> 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中的所有I found都是关于JavaScript的。

npm install是做什么的?在我看来,它应该只启动一些下载过程。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-22 12:21:10

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

  1. 下载您使用参数指定的npm包,或者在package.json文件中下载,以及node_modules文件夹中的依赖项(来自您定义的npm存储库主机)。(或使用已存在的本地副本。请参见shrink-wrapping)
  2. Run pre-installinstallpost-install脚本以了解其本身和每个依赖项。See Lifecycle Scripts
  3. The -g指令告诉npm在全局共享node_modules文件夹(通常是节点所在的位置)中安装程序包。这还允许您从命令行访问模块,因为bin被符号链接到一个路径文件夹(通常是usr/local/bin)。检查此link

对于sinopia,他们没有标准的package.json文件,他们有一个package.yaml文件。检查yamp plugin

如果你检查他们的预发布脚本,它包含

代码语言:javascript
复制
prepublish: js-yaml package.yaml > package.json

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

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

代码语言:javascript
复制
  "scripts": {
    "test": "node test/test.js",
    "install": "node-gyp rebuild"
  },

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

您可以通过执行以下操作来亲自尝试

代码语言:javascript
复制
npm install -g node-gyp && node-gyp rebuild

在控制台中

票数 10
EN

Stack Overflow用户

发布于 2015-12-22 12:06:56

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

根据您安装节点的方式,全局安装的软件包的位置可能会有所不同。通过在命令行中键入npm list -g,找出它们的安装位置。

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

票数 9
EN

Stack Overflow用户

发布于 2015-12-22 12:21:22

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34408154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档