klb 2019-06-29
本教程将向你展示如何设置Meteor应用程序以用作Ðapp,并可能回答几个关于为什么应该使用Meteor的问题。
是的,Meteor是一个完整的堆栈框架,它的主要改进是实时Web应用程序,但Meteor也是第一个框架(我知道),它完全支持了单页app(SPA)开发并提供了所有必要的工具。
Meteor非常适合的5个理由:
meteor-build-client将所有前端代码作为单个index.html,使用一个js和css文件加载你的资源。然后,你可以在任何地方托管它或简单地运行index.html本身或稍后在swarm上分发它。$scope或binding)localstorage或indexedDB不,使用meteor-build-client,你可以在没有服务器的情况下运行Ðapp的所有静态资源,但是如果你使用像iron或flow-router这样的路由器 ,则需要使用hash(index.html#!/mypath)路由而不是干净的HTML5 pushstate路由。
如果还没有安装Meteor:
$ curl https://install.meteor.com/ | SH
$ meteor create myDapp $ cd myDapp
接下来添加web3包:
$ meteor add ethereum:web3
我还建议添加以下包:
EthTools对象提供了一组格式转换函数和ether的模板助手。EthAccounts集合,其中余额将自动更新。EthBlocks集合。要获得最新的块,请使用EthBlocks.latest(它还将具有最新的默认gasPrice)TemplateVar对象,允许你设置特定于模板实例的反应变量。minimongo集合。Meteor不会强制你拥有特定的文件夹结构,尽管某些文件夹具有特定含义,并且在绑定/运行你的应用程序时将被区别对待。
client的文件夹中的文件只会由应用程序的客户端部分加载,因为我们正在构建一个Ðapp,这就是我们大多数文件所在的位置。lib文件夹中的文件将在同一文件夹中的其他文件之前加载。这是你的init文件,库或以太坊特定文件的理想位置。public的文件夹包含meteor资源将在你的网络服务器的根目录上提供(或以后绑定的Ðapp)。server,tests,packages等。如果你想了解它们,请查看Meteor因此,为了构建Ðapp,我们理想状况下是在myDapp文件夹中创建以下文件夹结构:
- myDapp
- client
- lib
- myDapp.html
- myDapp.js
- myDapp.css
- public注意社区还提供了像Nick Dodson这样的Meteor Ðapp Boilerplates:https://github.com/SilentCicero/meteor-dapp-boilerplate
要连接我们的dapp,我们需要在另一个终端中使用正确的CORS头开始geth:
$ geth --rpc --rpccorsdomain "http://localhost:3000"
我们还需要设置provider。理想情况下,我们在lib文件夹中创建一个名为init.js的文件,并添加以下行:
if(typeof web3 === 'undefined')
web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));现在我们可以通过简单运行来运行我们的Ðapp:
$ meteor
如果我们转到http://localhost:3000,我们应该看到一个网站出现,如果我们打开浏览器控制台,我们可以使用web3对象来查询geth节点:
> web3.eth.accounts ['0xfff2b43a7433ddf50bb82227ed519cd6b142d382']
如果你希望你的Ðapp很好地适应Mist并且遵循官方的外观,请使用dapp-styles css css/less框架。
请注意,它们正在大量开发中,类名称和元素可能会发生变化。
要添加它,请将以下包添加到Ðapp:
$ meteor add less $ meteor add ethereum:dapp-styles
现在将myDapp.css重命名为myDapp.less并在其中添加以下行:
// libs
@import '{ethereum:dapp-styles}/dapp-styles.less';现在,你可以使用所有dapp-styles类,也可以覆盖框架的所有变量。你可以在回调中找到它们。通过将它们复制到myDapp.less文件并设置不同的值来覆盖它们。
为了让你的Ðapp开发人员更轻松,我们提供了一些帮助你更快地构建Ðapp的软件包。
如果你添加上面推荐的软件包,你应该使用以太坊:ethereum:tools,ethereum:accounts和ethereum:blocks。
这3个包为你提供了EthTools,EthAccounts和EthBlocks对象,它们为你提供格式化程序功能,包含来自web3.eth.accounts(具有自动更新余额)的帐户的集合以及最近50个块的集合。
大多数这些功能都是响应式的,因此它们应该使构建界面变得轻而易举。
如果你看看myDapp.html你会发现hello模板。只需在<template name="hello">..</template>标签之间添加一个名为{{currentBlock}}的helper。
现在打开myDapp.js并在counter() {..}之后添加currentBlock helper:
Template.elements.helpers({
counter() {
...
},
currentBlock() {
return EthBlocks.latest.number;
}
});然后通过添加EthBlocks.init();初始化EthBlocks EthBlocks.init();在this.counter = new ReactiveVar(0);
如果你现在在浏览器中检查Ðapp,你应该会看到最新的块号,一旦你开采,它将会增加。
有关更多示例,请查看软件包的readme文件和演示 (源代码)以获取更多信息。
本教程不会用Meteor构建应用程序。有关这方面的信息,请参阅Meteor的教程,优秀资源列表 或使用Meteor或Discover Meteor构建单页Web应用程序等书籍。
TODO:
client/lib/ethereum/somefile.js。myCollection.observe({added: func, changed: func, removed: func})与ethereum进行通信,尽可能地保持ethereum逻辑不在你的应用中。这样你只需要编写和读取你的响应集合,观察函数将处理其余的(例如sendTransactions)有关示例,请参阅以太坊钱包。
要将Ðapp绑定到本地独立文件,请使用meteor-build-client:
$ npm install -g meteor-build-client $ cd myDapp $ meteor-build-client ../build --path ""
这会将你的Ðapps静态文件放入myDapp文件夹上方的build文件夹中。
最后一个选项--path将使所有文件相对链接,允许你通过单击build/index.html启动应用程序。
请注意,在file://协议上运行应用程序时,由于Web安全性,你将无法使用客户端路由。稍后你将能够使用客户端路由,因为dapps是通过eth://协议提供的。
将来你可以简单地在swarm上传你的Ðapp。
要获得Ðapp的早期流量,你可以将Ðapp提交给Dapp Insight。 这是一个最受欢迎的Dapp分析工具,它列出了世界上所有正在运行的Dapps。
======================================================================
分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:
汇智网原创翻译,转载请标明出处。这里是原文如何使用Meteor开发以太坊Dapp