我想在我的反应JS应用程序中使用一些Cordova插件,应用程序一直在失败。我知道cordova仅在运行时可用,我需要一个解决方法。
我的应用是使用带有cordova here
的create react app创建的例如,我想导入cordova-plugin-device以使用以下代码获取设备uuid:
import React, {Component} from 'react';
...
var device = require("cordova-plugin-device");
class Login extends Component {
handleSubmit = () => {
const { phone, password } = this.state
let params = {
phonenumber: phone,
password: password,
deviceID: device ? device.uuid : "test"
}
...
}
render () {
...
}
}
}
我在npm start
时遇到错误,当我运行npm build
时。这是错误Module not found: Can't resolve 'cordova-plugin-device' in 'C:\projects\
任何关于如何实现这一点的指示都将不胜感激。
答案 0 :(得分:1)
我想到了如何解决我的问题。 COrdova在运行时可用,因此我使用window.cordovaPulgin来访问它。
例如,我需要一个调用其方法的Payment插件服务,如下所示:
PaymentPlugin.pay(payRequest, paySuccess, payFail);
我的问题是我的代码npm start && npm run build
失败了,因为它找不到PaymentPlugin
,所以为了使这项工作,经过广泛的研究,我意识到如果插件已正确安装,我将能够像
window.PaymentPlugin.pay(payRequest, paySuccess, payFail);
答案 1 :(得分:0)
我试图按照@Lateefah提出的相同建议解决方案来访问本地通知插件,但window.cordova显示为未定义。经过更多研究后,我意识到该解决方案是正确的,但我的React应用程序必须驻留在cordova项目中,如此处https://stackoverflow.com/a/43440380/4080906所示。
我遵循的步骤:
创建cordova应用(例如cordovaApp)
cd cordovaApp和&create-react-app reactApp
在reactApp中修改index.js并添加
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import * as serviceWorker from "./serviceWorker";
const startApp = () => {
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById("root")
);
};
if (!window.cordova) {
startApp();
} else {
document.addEventListener("deviceready", startApp, false);
}
serviceWorker.unregister();
<script type="text/javascript" src="cordova.js"></script>
"build": "react-scripts build && cp -a ./build/. ../www/",
import React from "react";
import logo from "./logo.svg";
import "./App.css";
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<button
onClick={() => {
if (window.cordova) {
if (window.cordova.plugins) {
alert("Crodova and plugins Found");
window.cordova.plugins.notification.local.schedule({
title: "My first notification",
text: "Thats pretty easy...",
foreground: true,
});
} else alert("plugins not found");
} else alert("Cordova not found");
}}
>
Get Notified
</button>
</header>
</div>
);
}
export default App;