“npm install -g”到底做了什么?
我想用sinopiabuild立一个私人的npmregistry,并执行'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
所以我想知道'npm install'做什么,因为我认为它只做一些下载过程。
非常感谢。
npm install <package>
或者npm install -g <package>
会
-
在node_modules文件夹内下载一个你用参数指定的npm软件包,或者在你的package.json文件中,以及它的依赖关系(来自你定义的npm版本库主机)。 (或使用它的一个已经存在的本地副本,请参阅收缩包装 )
-
为自身和每个依赖项运行
pre-install
,install
和post-install
脚本。 请参阅生命周期脚本 -
-g指令告诉npm将程序包安装在全局共享的node_modules文件夹中(通常是节点所在的位置)。 这也将允许您从命令行访问模块,因为bin被链接到一个PATH文件夹(通常是usr / local / bin)中。 检查这个链接
在sinopia的情况下,他们没有一个标准的package.json
文件,他们有一个package.yaml文件。 检查yamp
插件 。
如果您检查他们的预发布脚本,它包含
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
在控制台中
在npm install -g
的g
是一个标志,表示您要在系统范围(全局)安装特定的npm模块。 没有g
选项,模块将被安装在名为node_modules
-try it的当前目录中。
全局安装的软件包的位置可能会有所不同,具体取决于您安装节点的方式。 通过在命令行中inputnpm list -g
来查找它们的安装位置。
编辑:你的错误可能是由于你的npm根目录的特权不足造成的,但也可能是你所使用的节点版本不被该库支持。 检查你需要运行crypt3
哪个版本的node
,并确保你的节点版本匹配( node -v
)。 如果与所需版本不匹配,则可以使用节点版本pipe理器(如nvm)切换到该版本,然后再次尝试npm install
。
npm install -g <package-name>
尝试将软件包安装到系统范围的node_modules目录(对于Mac,这将是"/usr/local/lib/node_modules"
)