为啥`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?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 npm install 之后 npm 正在运行准备脚本,我该如何停止它?
为啥 yarn install checkout github 存储库依赖项但 npm install 没有?