为啥`npm install -g` 不适用于 web3?

Posted

技术标签:

【中文标题】为啥`npm install -g` 不适用于 web3?【英文标题】:Why `npm install -g` does not work for web3?为什么`npm install -g` 不适用于 web3? 【发布时间】:2018-09-04 01:02:09 【问题描述】:

当我运行npm install web3时,我可以正确运行以下nodejs文件。

$ cat main.js 
#!/usr/bin/env node
// vim: set noexpandtab tabstop=2:

const web3 = require('web3');
console.log(web3.utils.asciiToHex('I have 100!'));

如果我改为运行 npm install -g web3,则会收到以下错误。有谁知道为什么带有-g 的命令不起作用。谢谢。

$ ./main.js 
module.js:487
    throw err;
    ^

Error: Cannot find module 'web3'
    at Function.Module._resolveFilename (module.js:485:15)
    at Function.Module._load (module.js:437:25)
    at Module.require (module.js:513:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/xxx/linux/test/web/Node.js/module/web3/utils/main.js:4:14)
    at Module._compile (module.js:569:30)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:503:32)
    at tryModuleLoad (module.js:466:12)
    at Function.Module._load (module.js:458:3)

【问题讨论】:

【参考方案1】:

基本上,您正在尝试在您的机器上全局安装软件包。为此,您需要在 linux 或 Windows 中具有 root 访问权限,您必须在管理模式下运行 cmd。

【讨论】:

【参考方案2】:

您以错误的方式使用npm install -g。由于您在本地调用 ./main.js,因此您需要将 web3 安装在本地 node_modules/ 文件夹中。

npm install web3 应该足够了,没有-g

【讨论】:

我看到全局安装的其他模块可以工作。为什么web3 必须安装在本地的node_modules/ 文件夹中? 这是因为当您require('web3') 时,它会隐式在node_modules 文件夹中查找相应的库。这就是为什么您必须执行 require('./web3') 之类的操作来导入同一文件夹中的实际内容 在全局上安装东西可以让你在命令行中使用模块,但它不会将模块导入本地项目 @user1424739 如果 web3 是一个 cli 命令,您将在全局范围内安装它以便能够运行该 cli 命令,但您没有将它用作 cli 命令,您正在使用它作为代码中的依赖项。

以上是关于为啥`npm install -g` 不适用于 web3?的主要内容,如果未能解决你的问题,请参考以下文章

为啥数据表不适用于gridview? [复制]

为啥在 npm install 之后 npm 正在运行准备脚本,我该如何停止它?

为啥 yarn install checkout github 存储库依赖项但 npm install 没有?

Npm 包样式不适用于类

为啥 npm install 在 git bash 上不起作用

为啥“npm install”告诉我“没有安装你必须自己安装对等依赖项:”?