React Native run error: XXX could not be cloned
React Native run error: XXX could not be cloned
不知道怎么形容才好。我正在做 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.
所有版本:
npm version: 7.10.0
"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
.
我尝试了什么:
谷歌搜索,一般来说。找不到任何可行的解决方案。发现这可能是 babel 的问题,但它可能是完全错误的,我不知道
npm start --reset-cache
正在删除缓存文件夹、watchman 等
npm install --legacy-peer-deps
克隆项目并在另一个文件夹中执行所有操作
正在恢复或删除包 - lock.json 和 yarn.lock。安装或不安装它们
尝试更新 babel 版本
运行同时 android 和 ios 结果相同
运行正在调试或发布版本,构建发布也失败并出现相同的错误。
没有任何帮助。
令人惊讶的是,之前一切正常,它所做的这些功能都包含在以前的版本中,没有任何问题。可能某些库版本搞砸了。我有它们,但在 rm -rf node_modules
之后我就没有了。可能是 babel 问题。但是我真的不知道,我读过。
以防万一,例如'could not be cloned'的函数。我什至不在那里克隆对象。
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)
我非常感谢您的反馈,我被困在了这一点上。
我发现这很可能是 babel 问题。如果您像我一样遇到这个问题,升级库,只需回滚到可用的旧版本,然后一个一个地升级库。我升级@babel/core
后重现了这个问题。我只是再次回滚,再也没有碰过 babel。仍然工作正常。
如果你像我一样偶然发现这个,因为一些随机库不能与本机反应,这就是我所做的。根据错误的堆栈跟踪,我找到了 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 大师能够跳到这里告诉我们为什么这是一个可怕的想法,但它让我畅通无阻,所以我想我会分享。
请注意,我还没有在生产中使用它。当我着手进行生产构建时,我会报告这是否有效。
不知道怎么形容才好。我正在做 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.
所有版本:
npm version: 7.10.0
"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
.
我尝试了什么:
谷歌搜索,一般来说。找不到任何可行的解决方案。发现这可能是 babel 的问题,但它可能是完全错误的,我不知道
npm start --reset-cache
正在删除缓存文件夹、watchman 等
npm install --legacy-peer-deps
克隆项目并在另一个文件夹中执行所有操作
正在恢复或删除包 - lock.json 和 yarn.lock。安装或不安装它们
尝试更新 babel 版本
运行同时 android 和 ios 结果相同
运行正在调试或发布版本,构建发布也失败并出现相同的错误。
没有任何帮助。
令人惊讶的是,之前一切正常,它所做的这些功能都包含在以前的版本中,没有任何问题。可能某些库版本搞砸了。我有它们,但在 rm -rf node_modules
之后我就没有了。可能是 babel 问题。但是我真的不知道,我读过。
以防万一,例如'could not be cloned'的函数。我什至不在那里克隆对象。
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)
我非常感谢您的反馈,我被困在了这一点上。
我发现这很可能是 babel 问题。如果您像我一样遇到这个问题,升级库,只需回滚到可用的旧版本,然后一个一个地升级库。我升级@babel/core
后重现了这个问题。我只是再次回滚,再也没有碰过 babel。仍然工作正常。
如果你像我一样偶然发现这个,因为一些随机库不能与本机反应,这就是我所做的。根据错误的堆栈跟踪,我找到了 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 大师能够跳到这里告诉我们为什么这是一个可怕的想法,但它让我畅通无阻,所以我想我会分享。
请注意,我还没有在生产中使用它。当我着手进行生产构建时,我会报告这是否有效。