Попытка перенести Google Speech to text API в React-Native. Это код, который у меня есть. Я получаю следующее сообщение об ошибке: «Не удалось объединить: Ошибка:
Unable to resolve module
fs
from/Users/Desktop/finalTest/final3/App.js
: Modulefs
does not exist in the Haste module map".
Я попытался запустить предложенные команды, но это все равно не сработало:
- Clear watchman watches:
watchman watch-del-all
.
- Delete the
node_modules
folder:rm -rf node_modules && npm install
.- Reset Metro Bundler cache:
rm -rf /tmp/metro-bundler-cache-*
ornpm start -- --reset-cache
.- Remove haste cache:
rm -rf /tmp/haste-map-react-native-packager-*
.
Любая помощь будет оценена по достоинству.
import React, { Component } from "react";
import { Platform, StyleSheet, Text, View } from "react-native";
import axios from "axios";
const instructions = Platform.select({
ios: "Press Cmd+R to reload,\n" + "Cmd+D or shake for dev menu",
android:
"Double tap R on your keyboard to reload,\n" +
"Shake or press menu button for dev menu"
});
const fs = require("fs");
const axios = require("axios");
const API_KEY = "./keyfile.json";
const fileName = "./audio.raw";
// Reads a local audio file and converts it to base64
const file = fs.readFileSync(fileName);
const audioBytes = file.toString("base64");
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
const audio = {
content: audioBytes
};
const config = {
encoding: "LINEAR16",
sampleRateHertz: 16000,
languageCode: "en-US"
};
const request = {
audio: audio,
config: config
};
const apiKey = API_KEY;
const url = `https://speech.googleapis.com/v1/speech:recognize?key=${apiKey}`;
axios
.request({
url,
method: "POST",
data: request
})
.then(response => {
const transcription = response.data.results
.map(result => result.alternatives[0].transcript)
.join("\n");
console.info(`Transcription: ${transcription}`);
})
.catch(err => {
console.info("err :", err);
});
type Props = {};
export default class App extends Component<Props> {
render() {
return (
<View style = {styles.container}>
<Text style = {styles.welcome}>Welcome to React Native!</Text>
<Text style = {styles.instructions}>To get started, edit App.js</Text>
<Text style = {styles.instructions}>{instructions}</Text>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "center",
backgroundColor: "#F5FCFF"
},
welcome: {
fontSize: 20,
textAlign: "center",
margin: 10
},
instructions: {
textAlign: "center",
color: "#333333",
marginBottom: 5
}
});
Вы не можете использовать fs
или какие-либо модули ядра узла, если на то пошло, в react native. Вы можете прочитать об этом здесь., но лучше думать о вашем JS как о чистом JavaScript без каких-либо добавленных API или модулей.
Если вам нужен доступ к файловой системе, вам понадобится сторонняя библиотека, например react-native-fs
Заменил чтение аудиофайла на это:
const audioBytes = rfs.readFile(fileName, "base64")
Теперь я получаю эту ошибку: undefined не является объектом (оценка 'RNFSManager.RNFSFileTypeRegular') Я установил и связал его, используя:react-native link react-native-fs