Javascript NodeJS包混淆

Javascript NodeJS包混淆,javascript,node.js,npm,Javascript,Node.js,Npm,在我的package.json文件中,我有: "devDependencies": { "chai": "^4.1.2", "chai-as-promised": "^7.0.0", "chai-bignumber": "^2.0.0", "decimal.js": "^10.0.0", "ethereumjs-testrpc-sc": "6.1.2", "ganache-cli": "6.1.0", "solidity-coverag

在我的
package.json
文件中,我有:

  "devDependencies": {
    "chai": "^4.1.2",
    "chai-as-promised": "^7.0.0",
    "chai-bignumber": "^2.0.0",
    "decimal.js": "^10.0.0",
    "ethereumjs-testrpc-sc": "6.1.2",
    "ganache-cli": "6.1.0",
    "solidity-coverage": "0.4.14",
    "truffle": "4.1.3"
  }
我创建了一个NodeJS脚本文件
getWeb3Version.js

let web3 = require("web3");
console.log(web3.version);
当我在
npm安装之前运行
节点getWeb3Version.js
时,我得到
1.0.0-beta.30

当我在
npm安装之后运行
节点getWeb3Version.js
时,我得到了
未定义的

为了进行更深入的研究,我将
console.log(web3.version)
更改为
console.log(web3
),似乎
npm安装之后的
web3
对象是
npm安装之前的
web3
对象的一个非常小的子集

为了更深入地研究,我从项目文件夹(package.json
文件所在的文件夹)的内部和外部调用了
npm list--depth=0

当我从我的项目文件夹中调用
npm list--depth=0
时,我得到以下信息:

+-- chai@4.1.2
+-- chai-as-promised@7.1.1
+-- chai-bignumber@2.0.2
+-- decimal.js@10.0.0
+-- ethereumjs-testrpc-sc@6.1.2
+-- ganache-cli@6.1.0
+-- solidity-coverage@0.4.14
`-- truffle@4.1.3
+-- chai@4.1.2
+-- decimal.js@9.0.1
+-- ethereumjs-testrpc-sc@6.0.7
+-- ganache-cli@6.1.0
+-- log4js@2.5.2
+-- pug@2.0.0-rc.4
+-- solc@0.4.19
+-- solidity-coverage@0.4.14
+-- solidity-parser-sc@0.4.4
+-- sprintf-js@1.1.1
+-- testrpc@0.0.1
+-- truffle@4.1.7
`-- web3@1.0.0-beta.30
正如您所看到的,
web3
甚至不存在(这很明显,因为我没有将其导入我的
package.json
文件中)

尽管如此,
require(“web3”)
似乎是可行的,如问题开头所述

当我从项目文件夹外部调用
npm list--depth=0
时,我得到以下结果:

+-- chai@4.1.2
+-- chai-as-promised@7.1.1
+-- chai-bignumber@2.0.2
+-- decimal.js@10.0.0
+-- ethereumjs-testrpc-sc@6.1.2
+-- ganache-cli@6.1.0
+-- solidity-coverage@0.4.14
`-- truffle@4.1.3
+-- chai@4.1.2
+-- decimal.js@9.0.1
+-- ethereumjs-testrpc-sc@6.0.7
+-- ganache-cli@6.1.0
+-- log4js@2.5.2
+-- pug@2.0.0-rc.4
+-- solc@0.4.19
+-- solidity-coverage@0.4.14
+-- solidity-parser-sc@0.4.4
+-- sprintf-js@1.1.1
+-- testrpc@0.0.1
+-- truffle@4.1.7
`-- web3@1.0.0-beta.30
后面是一堆以
npm ERR!开头的行!无关:

这到底是怎么回事

在我的
package.json
文件中导入的某个包是否可能导出我执行
console.log(web3)
时看到的
web3
对象的子集

是web3对象的一个非常小的子集
是在
npm安装

原因是,您安装的一个模块正在使用不同版本的
web3
。当您没有进行
npm安装时
web3
软件包是从全局软件包中获得的,即
web3@1.0.0-beta.30

这里要记住的关键是,本地包覆盖 全球一揽子计划


如果包未列在依赖项中,并且您仍然能够使用它,则可能是因为它是全局安装的。 您可以通过执行
npm ls-g

与chai、ganache cli不同的是,web3是一个应用程序依赖项,因此请尝试在依赖项而不是开发依赖项中查找它

我会在我的
包中将其列为依赖项。json
为避免任何混淆,通常会为cli等安装全局模块,在其他情况下,最好在
package.json
npm列表中指定模块,npm列表不会给出完整的列表。您可以查看
node\u modules
文件夹,我打赌您将拥有本地版本的
web3
@SunilBN:谢谢。我在我的项目文件夹中有
node\u模块
(但我在问题中解释过,
web3
不在那里)。我还有一个在
C:\Users\my\u username
,还有一个在
C:\Users\my\u username\AppData\Roaming\npm
。正如你可能猜到的,我正在Windows上运行。我到底该拿这些做什么?谢谢。但是,我已按照中的说明从系统中删除了所有全局安装的软件包。我承认,我确实看到了另一个全局包可能位于的地方,在
C:\Users\my\u username\node\u modules
,所以这个答案可能不完整…试试
npm ls web3
,你会更清楚。当我在我的项目文件夹外这样做时,我得到
web3@0.18.4不相关的
坚固性下-coverage@0.4.14
web3@1.0.0-beta.30在顶级。当我在项目文件夹中执行此操作时,我得到
web3@0.18.4
下的
坚固性-coverage@0.4.14
。此命令列出了外部和内部可用的模块,因为您删除了全局模块,您将只得到一个,即由
npm安装安装的模块。如果在删除节点_模块后立即尝试使用该模块,它将立即抛出man错误