【问题标题】:React Native: Unable to resolve module fsReact Native:无法解析模块 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 是节点核心模块之一。我不认为我需要安装它。不过感谢您的快速回复。

标签: npm react-native


【解决方案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-ssrs": "^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 列表,直接调用即可。

      例子:

      1. 从'./assets/dataSource/subscriptionData.json'导入订阅数据; 或
      2. 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"
          }]
      

      【讨论】:

        猜你喜欢
        • 2022-11-12
        • 2017-10-11
        • 2016-03-23
        • 1970-01-01
        • 2018-11-18
        • 1970-01-01
        • 2020-04-25
        • 2020-04-15
        • 2020-03-02
        相关资源
        最近更新 更多