【发布时间】:2018-11-20 04:53:08
【问题描述】:
使用 Reactjs webpack 项目,我可以运行 webpack 开发服务器并使用 web3 访问我的 index.html。
如果我构建项目并在 Chrome 中打开 index.html,则不会检测到 web3。
运行 webpack-dev-server --mode development --open --hot 时一切正常 但是使用 webpack --mode 开发,则不会注入 web3
我的应用程序的目的是一个在本地运行的工具,它不必从任何公共的地方提供,我也不认为我需要运行一个精简服务器来提供内容。
- web3: 1.0.0-beta.36
- webpack:4.22.0
- webpack-cli: 3.1.2
-
webpack-dev-server: 3.1.8
import './index.css'; import IxoTimelockApp from './components/IxoTimelockApp'; import InstallMetaMask from './components/install- metamask/install-metamask-component.jsx'; let regeneratorRuntime = require("regenerator-runtime"); class App extends Component { state = { web3Obj:null } componentDidUpdate(prevprops) { if (prevprops != this.props){ this.setState({web3Obj: this.props.web3Obj}) } } componentDidMount(){ window.addEventListener('load', async () => { // Modern dapp browsers... if (window.ethereum) { window.web3 = new Web3(ethereum); try { // Request account access if needed await ethereum.enable(); this.setState({web3Obj: window.web3}) } catch (error) { // User denied account access... } } // Legacy dapp browsers... else if (window.web3) { window.web3 = new Web3(web3.currentProvider); this.setState({web3Obj: window.web3}) } // Non-dapp browsers... else { console.log('Non-Ethereum browser detected. You should consider trying MetaMask!'); } }); } render() { if(this.state.web3Obj) { return <TimelockApp/> }else return <InstallMetaMask/> } } export default App; const wrapper = document.getElementById("root"); wrapper ? ReactDOM.render(<App />, wrapper) : false;
【问题讨论】:
标签: reactjs webpack webpack-dev-server web3