'npm install -g ' 到底是做什么的?
What exactly does 'npm install -g ' do?
我想使用 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 里面的所有东西 I found 都是关于 JavaScript.
npm install
是做什么的?在我看来,它应该只启动一些下载过程。
npm install -g
中的 g
是一个标志,表示您要在系统范围内(全局)安装该特定 npm 模块。如果没有 g
选项,该模块将本地安装在名为 node_modules
的当前目录中 - 试试吧!
全局安装包的位置可能因安装节点的方式而异。通过在命令行中键入 npm list -g
找出它们的安装位置。
编辑:您的错误可能是由于您的 npm 根目录中的权限不足引起的,但也可能是该库不支持您正在使用的节点版本。检查您需要 运行 crypt3
的 node
版本,并确保您的节点版本与该版本匹配 (node -v
)。如果与要求的版本不匹配,可以使用节点版本管理器如nvm切换到该版本,然后再尝试npm install
。
npm install <package>
或 npm install -g <package>
将
下载你用参数指定的 npm 包,或者在你的 package.json 文件中,连同它的依赖项(从你定义的 npm 存储库主机)在 node_modules文件夹。 (或者使用它的现有本地副本。参见 shrink-wrapping)
运行 自身及其每个依赖项的 pre-install
、install
和 post-install
脚本。参见 Lifecycle Scripts
-g 指令告诉 npm 将包安装在全局共享 node_modules 文件夹中(通常是节点所在的位置)。这也将允许您从命令行访问模块,因为 bin 已符号链接到 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
在控制台中
npm install -g <package-name>
尝试将软件包安装到系统范围的 node_modules 目录中(对于 Mac,这将是 "/usr/local/lib/node_modules"
)
我想使用 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 里面的所有东西 I found 都是关于 JavaScript.
npm install
是做什么的?在我看来,它应该只启动一些下载过程。
npm install -g
中的 g
是一个标志,表示您要在系统范围内(全局)安装该特定 npm 模块。如果没有 g
选项,该模块将本地安装在名为 node_modules
的当前目录中 - 试试吧!
全局安装包的位置可能因安装节点的方式而异。通过在命令行中键入 npm list -g
找出它们的安装位置。
编辑:您的错误可能是由于您的 npm 根目录中的权限不足引起的,但也可能是该库不支持您正在使用的节点版本。检查您需要 运行 crypt3
的 node
版本,并确保您的节点版本与该版本匹配 (node -v
)。如果与要求的版本不匹配,可以使用节点版本管理器如nvm切换到该版本,然后再尝试npm install
。
npm install <package>
或 npm install -g <package>
将
下载你用参数指定的 npm 包,或者在你的 package.json 文件中,连同它的依赖项(从你定义的 npm 存储库主机)在 node_modules文件夹。 (或者使用它的现有本地副本。参见 shrink-wrapping)
运行 自身及其每个依赖项的
pre-install
、install
和post-install
脚本。参见 Lifecycle Scripts-g 指令告诉 npm 将包安装在全局共享 node_modules 文件夹中(通常是节点所在的位置)。这也将允许您从命令行访问模块,因为 bin 已符号链接到 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
在控制台中
npm install -g <package-name>
尝试将软件包安装到系统范围的 node_modules 目录中(对于 Mac,这将是 "/usr/local/lib/node_modules"
)