无法读取 Bundler.transformFile 上未定义的属性(读取"转换文件")



我今天更新了node,但收到此错误:

error: TypeError: Cannot read properties of undefined (reading 'transformFile')
at Bundler.transformFile (/Users/.../node_modules/metro/src/Bundler.js:48:30)
at runMicrotasks (<anonymous>)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async Object.transform (/Users/.../node_modules/metro/src/lib/transformHelpers.js:101:12)
at async processModule (/Users/.../node_modules/metro/src/DeltaBundler/traverseDependencies.js:137:18)
at async traverseDependenciesForSingleFile (/Users/.../node_modules/metro/src/DeltaBundler/traverseDependencies.js:131:3)
at async Promise.all (index 0)
at async initialTraverseDependencies (/Users/.../node_modules/metro/src/DeltaBundler/traverseDependencies.js:114:3)
at async DeltaCalculator._getChangedDependencies (/Users/.../node_modules/metro/src/DeltaBundler/DeltaCalculator.js:164:25)
at async DeltaCalculator.getDelta (/Users/.../node_modules/metro/src/DeltaBundler/DeltaCalculator.js:94:16)

除此之外,我没有做任何不寻常的事情,所以我不确定该分享什么。如果我缺少任何信息,请发表评论,我会添加它。

构建终端时也会抛出此错误:

Failed to construct transformer:  Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:67:19)
at Object.createHash (node:crypto:130:10)
at stableHash (/Users/.../node_modules/metro-cache/src/stableHash.js:19:8)
at Object.getCacheKey (/Users/.../node_modules/metro-transform-worker/src/index.js:593:7)
at getTransformCacheKey (/Users/.../node_modules/metro/src/DeltaBundler/getTransformCacheKey.js:24:19)
at new Transformer (/Users/.../node_modules/metro/src/DeltaBundler/Transformer.js:48:9)
at /Users/.../node_modules/metro/src/Bundler.js:22:29
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

我的节点、npx 和反应原生版本是:

  • 节点:17.0.0
  • NPX:8.1.0
  • 反应本机 CLI:2.0.1

在Node.js 17.0.0 上遇到了同样的问题。为了解决这个问题,我降级到版本14.18.1,删除node_modules并重新安装。

你可以通过降级节点js来解决它

> nvm list // to see all available node version
> nvm install 16.13.0 // to install the version I wanted 
> nvm use 16.13.0  // use the installed version 
OR
> nvm alias default 16 // use the installed version as DEFAULT 

我尝试了不同的节点版本...同样的错误。 卸载并尝试了新版本的Android Studio...同样的错误。从零开始全新的项目...同样的错误。删除node_modules并运行 npm 我...同样的错误。

这是对我有用的东西。

npx react-native info

在该读数的顶部,它应该说明您正在使用的节点版本。(它告诉我我正在一个杂散的node_modules文件夹中使用 Node:17.xx.x。

我的解决方法只是重命名该文件夹(以防删除它会破坏不同的项目)。现在,当我运行npx react-native info时,它会告诉我正确的节点版本(16.13.1),并且我的所有项目都再次在模拟器中运行!

此问题是由于您当前使用的节点版本(例如节点版本 19)与项目使用的节点版本之间的差异。

要解决此问题,您需要根据项目使用的节点版本和当前节点版本进行降级或升级。

您必须先安装节点,然后再安装nvm (NODE VERSION MANAGER)。 NVM 是一个节点版本管理器,您可以使用它安装多个节点版本

旧19.2.0 18.12.10.12.1819.0.119.0.00.12.1516.16.018.9.018.8.00.12.1018.7.018.6.018.5.00.12.718.4.018.3.018.2.00.12.418.1.018.0.017.9.10.12.117.9.014.20.0 0.12.00.10.48
当前 LTS稳定 旧不稳定
0.11.16
19.1.018.12.00.12.170.11.15
16.18.10.12.160.11.14
16.18.00.11.13
18.11.016.17.10.12.140.11.12
18.10.016.17.00.12.130.11.11
18.9.10.12.120.11.10
16.15.10.12.11 0.11.9
16.15.00.11.8
16.14.20.12.9 0.11.7
16.14.10.12.8 0.11.6
16.14.00.11.5
16.13.20.12.6 0.11.4
16.13.10.12.5 0.11.3
16.13.00.11.2
14.21.10.12.30.11.1
14.21.00.12.20.11.0
14.20.10.9.12
0.9.11
17.8.014.19.30.9.10

我正在将Expo CLI与Node.js 17一起使用并遇到了相同的错误,并从这里找到了解决方案的提示(没有降级Node.js):https://github.com/facebook/react-native/issues/33107#issuecomment-1042612307

但是,我没有使用export而是通过运行以下命令将cross-env安装为 devDependencynpm i --save-dev cross-env

然后,我在package.jsonscripts部分下针对start脚本添加了以下命令。

"start": "cross-env NODE_OPTIONS=--openssl-legacy-provider expo start"

运行:

export NODE_OPTIONS=--openssl-legacy-provider

与 openssl 建立连接

首先,您必须安装节点版本管理器:

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

或:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

安装后,(如果您使用的是 Linux,请关闭并重新打开终端并)对其进行测试:

nvm -v

然后安装节点版本 16.3.0:

nvm install 16.13.0

并要求 NVM 使用此版本:

nvm use 16.13.0

错误来自节点版本。因此,您将需要降级。

npx react-native info - // to see what node version your project uses.
nvm list // to see all available node version
nvm install 16.18.0 // to install the version you want
nvm use 16.18.0  // use the installed version

nvm alias default 16 // use the installed version as DEFAULT

快速而肮脏的解决方法(对我有用):

添加或更新您的 package.json 引擎部分,以停止尝试使用 Node 17.0.x Current 进行构建,直到您在 tls 模块中解析新的 OpenSSL PKCS8 格式:

"engines": {
"node": "<17",
"npm": "<8.2"
},

我遇到了同样的问题。似乎问题是由于 Node.js 的 17.x 版本引起的。我解决了降级到 Node.js 16.12.0 的问题。

也有同样的问题。 从 16.13.1 降级到 17.3.0 版本,效果很好。

首先使用nvm list检查节点版本 使用 卸载不必要的 node 版本nvm uninstall version使用正在使用的版本号更改版本。 使用nvm install version_number安装新版本的节点 使用nvm use version_number的已安装的 Node 版本。将version_number替换为已安装的节点版本。

如果您执行@uzai sindiko 的步骤,当您尝试构建时,它会再次失败。如果你关闭终端,然后再次检查节点版本,它说17.3.1。

然后在你设置nvm use 16.13.0也做nvm uninstall 17.3.1然后你的项目将被构建。

谢谢

如果您使用的是较旧的 osx 版本,则可能需要将 nvm 脚本添加到 zshrc 文件中。操作方法如下:

  • 在终端中,键入open ~/.zshrc
  • .zshrc文件中,复制粘贴以下代码:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
  • 返回终端并运行source ~/.zshrc

现在 nvm 将工作。

  1. 使用节点版本16.12.0如果您使用的是 nvm,请设置默认值 节点版本到16.12.0。您可以使用以下命令
nvm alias default 16.12.0
  1. 删除node_modules文件夹。您可以使用以下命令:
rm -rf node_modules 
  1. 再次运行安卓运行命令

只是把它扔在那里。如果您在 metro.config.js 中使用watchFolders,请确保在构建之前删除该密钥!这为我解决了它。如果你是 npm 链接其他包,这很有用,但显然 eas build 将无法找到这些链接。

对我有用的解决方案。尝试使用以下 react-native 命令生成您的 main.jsbundle 文件,并在您的 iOS 文件夹中验证它。

1)删除 pods 文件夹和 Podfile.lock 文件

2)运行命令

react-native bundle --entry-file='index.js' --bundle-output='./ios/main.jsbundle' --dev=false --platform='ios' --assets-dest='./ios'

3)之后运行以下命令

npm start -- --reset-cache

您的地铁可能以某种方式运行。 在尝试任何花哨的东西之前重新启动计算机

我尝试了互联网上的所有解决方案,但没有一个帮助,检查是否没有任何工作,那么您的系统中一定有 nodejs 和 node。您可以使用node -vnodejs -v检查您的终端

卸载节点

sudo apt-get uninstall nodejs

你很好去!

相关内容

  • 没有找到相关文章

最新更新