Babel.js React Native运行错误:XXX无法克隆

h79rfbju  于 2023-08-01  发布在  Babel
关注(0)|答案(2)|浏览(135)

我不知道该怎么形容。我正在做react-native项目,发生了一些事情,由于某种原因我不能再运行它了。我收到一些奇怪的消息,好像有些功能无法克隆。

error: src/requests/TimeoutRequest.ts: function (path) {
          return fn.call(state, path, state);
        } could not be cloned.

字符串
或:

error: src/sensors/GPS.ts: Program(path) {
      importAll = path.scope.generateUid("$$_IMPORT_ALL");
      importDefault = path.scope.gen...<omitted>... } could not be cloned.


所有版本:
第一个月

"react": "^16.11.0",
"react-native": "^0.62.2",

dev:
"@babel/core": "^7.13.15",
"@babel/runtime": "^7.13.10",
"babel-jest": "^24.9.0",
"babel-plugin-root-import": "^6.6.0",
"metro-react-native-babel-preset": "^0.57.0",
"react-test-renderer": "16.9.0"


如果我注解掉这个函数。我在另一个中得到错误,等等。中间发生了什么:更新了npm版本。然后我在下载一些库时遇到了一些问题,我不得不rm -rf node_modules && npm install
我尝试的是:
谷歌搜索,一般来说。找不到任何可行的解决方案。发现这可能是巴别塔的问题,但它可能是完全错误的,我不知道
npm start --reset-cache
删除缓存文件夹、watchman文件等
npm install --legacy-peer-deps
克隆项目并在另一个文件夹中执行所有操作
恢复或删除package-lock.json和yarn. lock。使用或不使用它们进行安装
尝试更新babel版本
运行Android和iOS,结果相同
运行调试或发布版本时,构建发布版本也会失败,并出现相同的错误。
什么都没用。
令人惊讶的是,它以前工作得很好,它所做的这些功能都包含在以前的版本中,没有任何问题。可能有些库版本搞砸了。我以前有过,但在rm -rf node_modules之后就没有了。可能是巴别塔的问题。但我不知道,我读过。
为了以防万一,举例说明“无法克隆”的函数。我甚至不克隆物体在那里。

export async function TimeoutRequest(
    req: any,
    timeout: number = 5000,
): Promise<Response> {
    const timeoutId = setTimeout(() => controller.abort(), timeout)
    const controller = new AbortController()

    req.signal = controller.signal
    return new Promise((resolve, reject) => {
        fetch(req)
            .then(res => {
                clearTimeout(timeoutId)
                resolve(res)
            })
            .catch(err => {
                clearTimeout(timeoutId)
                reject(err)
            })
    })
}


此外,增加了错误发生时的堆栈跟踪:

at Object.serialize (v8.js:267:7)
    at _default (node_modules/@babel/core/lib/transformation/util/clone-deep.js:16:30)
    at normalizeFile (node_modules/@babel/core/lib/transformation/normalize-file.js:52:36)
    at normalizeFile.next (<anonymous>)
    at run (node_modules/@babel/core/lib/transformation/index.js:31:50)
    at run.next (<anonymous>)
    at node_modules/@babel/core/lib/transform-ast.js:20:41
    at Generator.next (<anonymous>)
    at evaluateSync (node_modules/gensync/index.js:251:28)


我真的很感激反馈,我被困在这一点上。

fhg3lkii

fhg3lkii1#

我发现这很可能是巴别塔的问题。如果你像我一样遇到这个问题,升级库,只是回滚到旧版本的作品,并升级库一个接一个。我在升级@babel/core后重现了这个问题。我只是又滚回去了,再也没有碰过Babel。仍然工作正常。

68de4m5k

68de4m5k2#

如果你像我一样偶然发现了这个,因为一些随机库不能与react native一起工作,这就是我所做的。根据错误的堆栈跟踪,我找到了node_modules/@babel/core/lib/transformation/util/deep-clone.js,我确信它是某个重要进程的基本组件,但似乎只是在复制代码。我将_default函数改为:

function _default(value) {
  if (_v().deserialize && _v().serialize) {
    try {
      return _v().deserialize(_v().serialize(value));
    } catch(err) {
      console.warn(err);
      return value;
    }
  }

  return (0, _cloneDeepBrowser.default)(value);
}

字符串
我又开始做生意了。我相信一位React Native大师会跳进来告诉我们为什么这是一个可怕的想法,但它让我畅通无阻,所以我想我会分享。
请注意,我还没有在生产中使用它。当我开始进行生产构建时,我将报告这是否有效。
编辑:它实际上继续在生产中工作。

相关问题