通过nvm方式可以将nodejs版本下载为16版本
# 安装nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
# 若出现因网络问题导致长时间下载失败,可尝试以下命令
curl -o- https://gitee.com/mirrors/nvm/raw/v0.33.2/install.sh | bash
# 加载nvm配置
source ~/.$(basename $SHELL)rc
# 安装Node.js 8
nvm install 16
如果出现连接不上GitHub的问题可以移步看我的另一篇博客Failed toconnect to github.com port 443: 拒绝连接 Could not resolve host: github.com_晚风皆是过客.的博客-CSDN博客
下载完成之后
#查询下载好的版本
node -v
npm -v
nvm --version
NodeJS v8.9.4 或 之后的版本
安装命令
npm install -g truffle
Truffle 大多数命令都是在 Truffle 项目目录下运行的。 所以第一步是创建一个 Truffle 项目。 可以创建一个空项目模板,不过对于刚接触Truffle的同学,推荐使用Truffle Boxes,它提供了示例应用代码和项目模板。 我们将使用MetaCoin box作为案例,它创建一个可以在帐户之间转移的Token(代币)。
为 Truffle 项目创建新目录:
mkdir MetaCoin
cd MetaCoin
下载 (“unbox”) MetaCoin box:
truffle unbox metacoin
下载不成功用下面这个命令
git clone https://github.com/truffle-box/metacoin-box.git
如果要创建没有合约的空工程,可以使用 truffle init.
在操作完成之后,就有这样的一个项目结构:
contracts/
: Solidity合约目录
migrations/
: 部署脚本文件目录
test/
: 测试脚本目录,参考 如何测试应用?
truffle.js
: Truffle 配置文件
contracts/MetaCoin.sol
: 这是一个用 Solidity 编写的 MetaCoin 代币 智能合约。注意他还引用了目录下的另外一个合约文件 contracts/ConvertLib.sol
。
contracts/Migrations.sol
: 这是一个单独的 Solidity 文件,用来管理和升级智能合约. 每一个工程都有这样的一个文件,并且通常不需要编辑它。
migrations/1_initial_migration.js
: 这是一个部署脚本,用来部署 Migrations
合约,对应 Migrations.sol
文件。
migrations/2_deploy_contracts.js
: 这是一个部署脚本,用来部署 MetaCoin
合约. (部署脚本的运行是有顺序的,以2开头的脚本通常在以1开头的脚本之后运行)
test/TestMetacoin.sol
: 这是一个用Solidity编写的测试用例文件,用来检查合约是否像预期一样工作。
test/metacoin.js
: 这是一个用JavaScript编写的测试用例脚本,用途和上面一样。
truffle-config.js
(之前是 truffle.js
): Truffle 配置文件, 用来设置网络信息,和其他项目相关的设置。当我们使用内建的默认的Truffle命令时,这个文件留空也是可以的。
打开控制台终端,运行 Solidity 测试用例:
truffle test ./test/TestMetacoin.sol
完成结果截图如下
运行 JavaScript 测试用例
truffle test ./test/metacoin.js
完成结果如图
编译智能合约:
truffle compile
/home/csdn/.nvm/versions/node/v8.17.0/lib/node_modules/truffle/build/3618.bundled.js:24504
return _this.outputFormatter && res ? _this.outputFormatter(res, this?.hexFormat) : res;
SyntaxError: Unexpected token .
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:617:28)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
at Module.require (module.js:597:17)
at require (internal/module.js:11:18)
at Object.__webpack_require__.f.require (/home/csdn/.nvm/versions/node/v8.17.0/lib/node_modules/truffle/build/cli.bundled.js:608:28)
这个错误完全是因为自己node版本不够,使用nvm方式下载的可以通过 nvm list查看自己有的nodejs版本通过nvm use 16(对应自己有的版本号)切换nodejs版本,切换完成之后在查一下nodejs版本即可
SyntaxError: Unexpected token '.'
at wrapSafe (internal/modules/cjs/loader.js:915:16)
at Module._compile (internal/modules/cjs/loader.js:963:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Module.require (internal/modules/cjs/loader.js:887:19)
at require (internal/modules/cjs/helpers.js:74:18)
at Object.__webpack_require__.f.require (/home/csdn/.nvm/versions/node/v12.22.12/lib/node_modules/truffle/build/cli.bundled.js:608:28)
at /home/csdn/.nvm/versions/node/v12.22.12/lib/node_modules/truffle/build/cli.bundled.js:538:40
at Array.reduce (
at postinstallObtain (/home/csdn/.nvm/versions/node/v12.22.12/lib/node_modules/truffle/scripts/postinstall.js:13:11)
at Object.
at Module._compile (internal/modules/cjs/loader.js:999:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
at internal/main/run_main_module.js:17:47
这个问题是因为所下载的truffle过多缓存过多清理一下缓存重新下载即可
npm uninstall -g truffle
npm install -g truffle
✖ Downloading
Unbox failed!
RequestError: getaddrinfo ENOTFOUND codeload.github.com
at ClientRequest.
at Object.onceWrapper (node:events:628:26)
at ClientRequest.emit (node:events:513:28)
at TLSSocket.socketErrorListener (node:_http_client:494:9)
at TLSSocket.emit (node:events:513:28)
at emitErrorNT (node:internal/streams/destroy:157:8)
at emitErrorCloseNT (node:internal/streams/destroy:122:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21)
Truffle v5.11.0 (core: 5.11.0)
Node v16.20.1
这是因为电脑连接不成功GitHub导致拉去不下来代码可以尝试换个命令
git clone https://github.com/truffle-box/metacoin-box.git
Error: Could not find artifacts for /home/csdn/fisco/MetaCoin/metacoin-box/test/TestMetacoin.sol from any sources
at Resolver.require (/home/csdn/.nvm/versions/node/v16.20.1/lib/node_modules/truffle/build/webpack:/packages/resolver/dist/lib/resolver.js:53:1)
at /home/csdn/.nvm/versions/node/v16.20.1/lib/node_modules/truffle/build/webpack:/packages/test/dist/src/Test.js:139:1
at Array.map (
at Object.
at Generator.next (
at fulfilled (/home/csdn/.nvm/versions/node/v16.20.1/lib/node_modules/truffle/build/webpack:/packages/test/dist/src/Test.js:28:43)
Truffle v5.11.0 (core: 5.11.0)
Node v16.20.1
这是因为名称的错误仔细观察可以看到test目录下面的TestMetaCoin.sol文件名称不对应执行命令的时候修改为test文件里面的sol文件即可