无法在 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 版本是:
- 节点:17.0.0
- npx: 8.1.0
- react-native-cli: 2.0.1
运行 与 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 可以工作了。
- 使用节点版本
16.12.0
。 如果您使用的是 nvm,请设置默认值
节点版本为 16.12.0
。您可以使用以下命令
nvm alias default 16.12.0
- 删除
node_modules
文件夹。您可以使用以下命令:
rm -rf node_modules
- 运行 android 运行 再次命令
我今天更新了 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 版本是:
- 节点:17.0.0
- npx: 8.1.0
- react-native-cli: 2.0.1
运行 与 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 可以工作了。
- 使用节点版本
16.12.0
。 如果您使用的是 nvm,请设置默认值 节点版本为16.12.0
。您可以使用以下命令
nvm alias default 16.12.0
- 删除
node_modules
文件夹。您可以使用以下命令:
rm -rf node_modules
- 运行 android 运行 再次命令