【问题标题】:React native : Failed to construct transformer: Error: Cannot create a string longer than 0x1fffffe8 charactersReact native:无法构造转换器:错误:无法创建长度超过 0x1fffffe8 个字符的字符串
【发布时间】:2020-09-11 02:42:52
【问题描述】:

package.json

{
  "name": "project",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "start": "react-native start",
    "test": "jest",
    "lint": "eslint ."
  },
  "dependencies": {
    "@react-native-community/async-storage": "^1.12.0",
    "@react-native-community/clipboard": "^1.2.3",
    "@react-native-community/masked-view": "^0.1.10",
    "@react-navigation/drawer": "^5.9.0",
    "@react-navigation/native": "^5.7.3",
    "@react-navigation/stack": "^5.9.0",
    "@twotalltotems/react-native-otp-input": "^1.3.11",
    "jetifier": "^1.6.6",
    "react": "16.13.1",
    "react-native": "^0.63.2",
    "react-native-barcode-builder": "^2.0.0",
    "react-native-biometrics": "^2.1.4",
    "react-native-chart-kit": "^6.6.1",
    "react-native-gesture-handler": "^1.7.0",
    "react-native-image-picker": "^2.3.3",
    "react-native-localization": "^2.1.6",
    "react-native-paper": "^4.0.1",
    "react-native-reanimated": "^1.13.0",
    "react-native-safe-area-context": "^3.1.6",
    "react-native-screens": "^2.10.1",
    "react-native-splash-screen": "^3.2.0",
    "react-native-svg": "^12.1.0",
    "react-native-swipe-list-view": "^3.2.3",
    "react-native-vector-icons": "^7.0.0"
  },
  "devDependencies": {
    "@babel/core": "7.11.4",
    "@babel/runtime": "7.11.2",
    "@react-native-community/eslint-config": "1.1.0",
    "babel-jest": "25.5.1",
    "eslint": "6.8.0",
    "jest": "25.5.4",
    "metro-react-native-babel-preset": "0.59.0",
    "miragejs": "^0.1.40",
    "react-test-renderer": "16.13.1"
  },
  "jest": {
    "preset": "react-native"
  }
}

我没有找到任何与此相关的答案,除了这个:https://github.com/facebook/react-native/issues/28189

但它对我不起作用......

myapp 在安卓模拟器上成功安装但卡在启动画面 ...

该应用程序在我的办公室计算机上运行良好,但它在我自己的计算机上无法运行

我的节点版本v14.10.0

所以请帮帮我。

【问题讨论】:

  • 您也可以在问题中添加完整的错误堆栈。
  • 好的,下次我记得这个。
  • 实际上我已经从头开始创建整个项目,但如果有人有,我很乐意看到解决方案

标签: node.js react-native


【解决方案1】:

我已尝试记录导致错误的文件,但 console.log 无法正常工作。 我想出了一个快速破解 throw filePath 的方法,然后我发现 我作为备份保留的一个 zip 文件是问题所在。

由于某种原因,react 不喜欢它,所以 我必须将它移到项目文件夹之外

【讨论】:

  • 你把这个 throw filePath 放在哪里了?来自 jest-haste-map 模块的 worker.js 内部?还是..?
  • @Dirk,如果您的项目文件夹中有任何 zip 文件夹,只需将其从那里删除并将其保存在其他地方。我有同样的问题,这对我有帮助。
【解决方案2】:

我遇到了完全相同的错误。原来它是“android.gradle\6.0.1\executionHistory”中的 gradle (> 700MB) 自动生成的大文件

【讨论】:

    【解决方案3】:

    我也遇到了同样的问题。

     warning: the transform cache was reset.                                                                          
                     Welcome to React Native!                                                                        
                    Learn once, write anywhere 
    Failed to construct transformer:  Error: Cannot create a string longer than 0x1fffffe8 characters                
        at Object.slice (buffer.js:608:37)                                                                           
        at Buffer.toString (buffer.js:805:14)                                                                        
        at Object.readFileSync (fs.js:421:41)                                                                        
        at getContent (J:\expoProjects\rn-cnn\node_modules\metro\node_modules\jest-haste-map\build\worker.js:149:41) 
        at Object.<anonymous> (J:\expoProjects\rn-cnn\node_modules\metro\node_modules\jest-haste-map\build\worker.js:
    199:9)                                                                                                           
        at Generator.next (<anonymous>)                                                                              
        at asyncGeneratorStep (J:\expoProjects\rn-cnn\node_modules\metro\node_modules\jest-haste-map\build\worker.js:
    78:24)                                                                                                           
        at _next (J:\expoProjects\rn-cnn\node_modules\metro\node_modules\jest-haste-map\build\worker.js:98:9)        
        at J:\expoProjects\rn-cnn\node_modules\metro\node_modules\jest-haste-map\build\worker.js:103:7               
        at new Promise (<anonymous>) {                                                                               
      type: 'Error',                                                                                                 
      code: 'ERR_STRING_TOO_LONG'                                                                           
    

    我通过将节点版本更改为 v14+ 然后恢复到节点 v10.15.3 的旧版本解决了该错误。

    【讨论】:

    • 我重新创建了项目并手动添加了所有屏幕和文件,因为当时我没有找到任何答案。顺便说一句,感谢您的回答,它可以帮助面临此类错误的人
    【解决方案4】:

    对于其他遇到相同问题并正在寻找调试方法的人:

    • 编辑/node_modules/jest-haste-map/build/worker.js

    • readFileSync 包裹在try...catch 中,如下所示:

      const getContent = () => {
        if (content === undefined) {
          try {
            content = fs().readFileSync(filePath, 'utf8');
          } catch (err) {
            throw new Error(`error readFileSync ${filePath} : ${err.message}`);
          }
        }
    
        return content;
      };
    
    • (重新)启动 Metro 捆绑器:

    /node_modules/react-native/scripts/launchPackager.command; exit

    我的输出:

    To reload the app press "r"
    To open developer menu press "d"
    
    Failed to construct transformer:  Error: error readFileSync <my project path>/some/big/file/that/caused/error : Cannot create a string longer than 0x1fffffe8 characters
        at getContent (<my project path>/node_modules/jest-haste-map/build/worker.js:133:15)
        at Object.worker (<my project path>/node_modules/jest-haste-map/build/worker.js:162:23)
        at execFunction (<my project path>/node_modules/jest-worker/build/workers/processChild.js:145:17)
        at execHelper (<my project path>/node_modules/jest-worker/build/workers/processChild.js:124:5)
        at execMethod (<my project path>/node_modules/jest-worker/build/workers/processChild.js:128:5)
        at process.messageListener (<my project path>/node_modules/jest-worker/build/workers/processChild.js:46:7)
        at process.emi
    
    

    希望这可以帮助其他遇到同样问题的人!

    【讨论】:

    • 谢谢 - 这在我的 Android 构建目录中显示了一个 ZIP 文件,我不知道它是如何结束的。
    • 不客气,很高兴一些努力至少可以帮助一个人?
    【解决方案5】:

    我花了一整天的时间,但我解决了它。当我想在 iOS 上启动应用程序时,我仍然无法理解为什么会出现此错误,但是:

    删除 android/app 中的build 目录修复了它。

    【讨论】:

      【解决方案6】:

      为了找出导致错误的文件,我使用了@dirk 方法。 我不知道为什么,但我的 App_name.app.dSYM.zip 变得太大(536MB),因此节点由于 512MB 的限制而无法读取它。在您的情况下,它可能是一些不同的文件。 这是一个补丁包,用于获取有关导致此错误的文件的更多信息

      diff --git a/node_modules/jest-haste-map/build/worker.js b/node_modules/jest-haste-map/build/worker.js
      index 1996d4a..1f17f11 100644
      --- a/node_modules/jest-haste-map/build/worker.js
      +++ b/node_modules/jest-haste-map/build/worker.js
      @@ -146,7 +146,11 @@ function _worker() {
       
           const getContent = () => {
             if (content === undefined) {
      -        content = _gracefulFs().default.readFileSync(filePath, 'utf8');
      +        try {
      +          content = _gracefulFs().default.readFileSync(filePath, 'utf8');
      +        } catch (err) {
      +          throw new Error(`error readFileSync ${filePath} : ${err.message}`);
      +        }
             }
       
             return content;
      
      
      

      【讨论】:

        【解决方案7】:

        将任何大型资产文件 [图片、视频等...] 移出项目目录。 https://github.com/facebook/react-native/issues/28189#issuecomment-592918995

        【讨论】:

          【解决方案8】:

          在我自己的情况下,我注意到我在我的 react native 应用程序中使用了一个 mp4 视频文件,该文件的大小太大。我不得不删除它,这就是我的解决方法

          【讨论】:

            【解决方案9】:

            检查您的项目结构/文件夹中是否有任何不相关的文件或 zip 如果是,则删除文件并解决错误

            【讨论】:

              猜你喜欢
              • 2021-09-14
              • 2022-11-10
              • 2020-11-05
              • 2021-06-20
              • 2020-10-21
              • 2012-09-19
              • 1970-01-01
              • 1970-01-01
              • 2022-08-10
              相关资源
              最近更新 更多