Я создал рабочее приложение Mongo / Express / React / Node, изменив этот шаблон . Я добавил еще пару страниц, и он работает нормально, но я пытаюсь добавить в него конденсатор, чтобы иметь версии iOS и Android. Я следовал инструкциям Capacitor для Добавление Capacitor в существующее веб-приложение , и оно прекрасно работает, но ничего не происходит. Если я добавлю тег сценария с предупреждением на index.html
, он запустится. Я думаю, что это не работает, обслуживая приложение должным образом внутри приложения. Так что это либо означает, что мне нужно, чтобы оно служило приложению должным образом внутри Capacitor, если это вообще возможно, либо мне нужно сделать так, чтобы оно связывало приложение React, чтобы его можно было загружать в приложение таким образом.
Вот мой capacitor.config.json
:
{
"appId": "com.example.app",
"appName": "mern-auth-capacitor",
"bundledWebRuntime": false,
"npmClient": "npm",
"webDir": "client/public",
"cordova": {}
}
Вот это client/public/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000">
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
<!-- Compiled and minified CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<title>MERN Auth App</title>
</head>
<body>
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<script>alert('index.html')</script>
</body>
</html>
Вот это client/src/App.js
:
import React, { Component } from "react";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
import jwt_decode from "jwt-decode";
import setAuthToken from "./utils/setAuthToken";
import { Plugins } from '@capacitor/core';
import { setCurrentUser, logoutUser } from "./actions/authActions";
import { Provider } from "react-redux";
import store from "./store";
import Navbar from "./components/layout/Navbar";
import Landing from "./components/layout/Landing";
import Register from "./components/auth/Register";
import Login from "./components/auth/Login";
import Settings from "./components/settings/Settings";
import Feedback from "./components/feedback/Feedback";
import ErrorPage from "./components/error/ErrorPage";
import PrivateRoute from "./components/private-route/PrivateRoute";
import Dashboard from "./components/dashboard/Dashboard";
import "./App.css";
alert('App.js');
const { Device, Modals } = Plugins;
// Check for token to keep user logged in
if (localStorage.jwtToken) {
// Set auth token header auth
const token = localStorage.jwtToken;
setAuthToken(token);
// Decode token and get user info and exp
const decoded = jwt_decode(token);
// Set user and isAuthenticated
store.dispatch(setCurrentUser(decoded));
// Check for expired token
const currentTime = Date.now() / 1000; // to get in milliseconds
if (decoded.exp < currentTime) {
// Logout user
store.dispatch(logoutUser());
// Redirect to login
window.location.href = "./login";
}
}
class App extends Component {
constructor(props) {
super(props);
this.showDeviceInfo = this.showDeviceInfo.bind(this);
}
async showDeviceInfo() {
let info = await Device.getInfo();
console.log({info});
await Modals.alert({
title: 'Info',
message: `UUID: ${info.uuid};
Model: ${info.model}`
});
}
render() {
alert('App.js - render()');
console.log('--->> in app render!!!');
return (
<Provider store={store}>
<Router>
<div className="App">
<Navbar />
<Switch>
<Route exact path="/" component={Landing} />
<Route exact path="/register" component={Register} />
<Route exact path="/login" component={Login} />
<PrivateRoute exact path="/settings" component={Settings} />
<PrivateRoute exact path="/dashboard" component={Dashboard} />
<PrivateRoute exact path="/feedback" component={Feedback} />
<Route component={ErrorPage} />
</Switch>
</div>
</Router>
</Provider>
);
}
}
export default App;