'npm install -g' 到底做了什么? [英] What exactly does 'npm install -g ' do?

查看:189
本文介绍了'npm install -g' 到底做了什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to set up a private npm registry using sinopia and I executed npm install -g sinopia, but some error message occurred:

> 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 相关.

I can see the .h files which relate to C or C++; how come this happens? All the stuff I found within sinopia is about JavaScript.

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

What does npm install do? In my opinion, it should only initiate some download process.

推荐答案

npm install npm install -g

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

为自身和每个依赖项运行 pre-installinstallpost-install 脚本.请参阅生命周期脚本

Run the pre-install, install and post-install scripts for itself and each dependencies. See Lifecycle Scripts

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

The -g directive tells npm to install the package in the global shared node_modules folder (usually where node is). This will also allow you to access the module from the command-line, as the bin is symlinked into a PATH folder (usually usr/local/bin). Check this link

在 sinopia 的情况下,他们没有标准的 package.json 文件,他们有一个 package.yaml 文件.检查 yamp 插件.

In the case of sinopia, they do not have a standard package.json file, they have a package.yaml file. Check the yamp plugin.

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

If you check their pre-publish script, it contains

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

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

Which converts their package.yaml into package.json. In their package.json, they have a dependency on the crypt3 package.

如果是 crypt3(sinopia 依赖之一),请检查 package.json .它包含

In the case of crypt3 (one of sinopia dependencies), check the package.json . It contains

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

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

So, when sinopia is npm installed, it will download and install all it's dependencies as well. When crypt3 is installed, the "node-gyp rebuild" will be run, that's why you are seeing native c / c++ compile outputs in your console.

你可以自己试试

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

在控制台中

这篇关于'npm install -g' 到底做了什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆