无法在 Bundler.transformFile 读取未定义的属性(读取 'transformFile')

Cannot read properties of undefined (reading 'transformFile') at 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 和 react-native 版本是:

运行 与 Node.js 17.0.0 的问题相同。为了解决这个问题,我降级到14.18.1版本,删除node_modules并重新安装。

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

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

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

我遇到了同样的问题。似乎问题出在 Node.js 的 17.x 版本。我解决了降级到 Node.js 16.12.0.

可以通过降级node 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 

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

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

以防万一,您执行了@uzai sindiko 的步骤,当您尝试构建时,它再次失败。如果您关闭终端,然后再次检查节点版本,它会显示 17.3.1.

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

谢谢

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

这对我有用。

运行

npx react-native info

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

我的修复只是重命名该文件夹(以防删除它会破坏另一个项目)。现在,当我 运行 npx react-native info 它告诉我正确的节点版本 (16.13.1) 并且我的所有项目再次在模拟器中 运行ning!

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

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

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

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

然后我在 scripts 部分下的 package.json 中针对 start 脚本添加了以下命令。

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

如果您使用较旧的 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. 运行 android 运行 再次命令