React Native:无法解析模块 fs

Posted

技术标签:

【中文标题】React Native:无法解析模块 fs【英文标题】:React Native: Unable to resolve module fs 【发布时间】:2016-12-27 01:13:16 【问题描述】:
Unable to resolve module fs from /...mypath

尝试将节点模块导入我的 react-native 应用程序时出现此错误。

模块以这种方式使用'fs':

var fs = require('fs');
var list = JSON.parse(fs.readFileSync(__dirname + '/list.json', 'utf8'));

【问题讨论】:

你做了npm install fs --save 吗? fs 是节点核心模块之一。我不认为我需要安装它。不过感谢您的快速回复。 【参考方案1】:

我最终使用 'rn-nodeify' 将 fs 包含到 React Native 中。您可以使用这种方法的大多数节点核心模块。使用 npm 安装它:

npm install rn-nodeify

然后在 package.json 文件中,在“scripts”中添加以下行来指定要包含在 RN 项目中的模块。比如我用了fscryptohttps,就行了

"postinstall": "node_modules/.bin/rn-nodeify --install crypto,fs,https --hack"

【讨论】:

对我来说,当我安装并尝试使用"@google-cloud/vision": "0.11.0" 时出现错误。不幸的是,这个 hack 没有帮助。 @gumkins,您是否找到解决方案或提醒 google-cloud 团队注意该问题?我在 react-native 客户端上的视觉 api 也有同样的问题。 不幸的是,这个 hack 对我也不起作用,我正在尝试在 react-native expo 项目中使用 "mssql-s-s-rs": "^1.3.12" "expo": "^ 35.0.0"【参考方案2】:

React Native 应用程序不在 Node.js 环境中运行(它仅由打包程序用于实际服务和编译您的应用程序包)。

由于您的应用在 iPhone 或 android 上的 JS VM 中运行,因此访问文件系统的唯一方法是使用 react-native-fs 或任何其他利用桥接连接与平台特定本机 API 对话的第三方模块。

【讨论】:

谢谢,tls 模块怎么样?我似乎找不到替代方案。你碰巧知道吗? 在所有情况下,请考虑 ios/Android 而不是 Node.js。你需要一个封装原生 API 的模块,尝试寻找一个 - 如果没有,你需要一些原生知识来自己封装它。【参考方案3】:

安装react-native-fs(按照de链接的说明操作),所以如果错误仍然存​​在,请进入目录('./node_modules/tfjs-image-recognition-base/build/commonjs/env/)搜索文件:(creatFileSystem.js)和编辑:

fs = require('fs')

到:

fs = require('react-native-fs')

我不知道这是否是推荐的方式,但它是唯一适合我的方式。

【讨论】:

【参考方案4】:

我花了一段时间才找到问题,我分享它,因为它可能对将来的参考有用(在 Expo 中使用 react native):

我的一位同事不小心在项目根目录中导入了我们的一个反应组件 app.config.js 以读取一些配置,而不是使用 expo-constants

导致它从明显没有fs lib.. 这是我们app.config.js 的第一行:

import 'dotenv/config';

app.config中读取设置的正确方法是:

import Constants from 'expo-constants';

const appConfig = Constants.manifest;

【讨论】:

【参考方案5】:

如果要导入 json 列表,直接调用即可。

例子:

    从'./assets/dataSource/subscriptionData.json'导入订阅数据; 或 var subscriptionData = require('./assets/dataSource/subscriptionData.json');

你不需要转换它,你可以用来导入你的数据或者你想要的方式。

    function installJson() 
      console.log("Iniciando Importação");
      subscriptionData.forEach(item => 
        firestore().collection('subscription').add(item);
      );
    


    subscriptionData.json
    [
    "code": 325,
    "name": "bla bla bla"
    ,
    
    "code": 356,
    "name": "ble ble ble"
    ]

【讨论】:

以上是关于React Native:无法解析模块 fs的主要内容,如果未能解决你的问题,请参考以下文章

错误:无法解析模块 react-redux/native

无法解析模块 react-native-navbar

无法解析模块'./core/theming' React-native cli

无法解析模块“react-native-screen”

React-native,monorepo:无法解析模块@babel/runtime/helpers/interopRequireDefault

无法解析模块 @react-native-masked-view/masked-view 2021