我今天更新了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 是一个节点版本管理器,您可以使用它安装多个节点版本
当前 | LTS | 旧稳定 旧不稳定 | |
---|---|---|---|
0.11.16 | |||
19.1.0 | 18.12.0 | 0.12.17 | 0.11.15 |
16.18.1 | 0.12.16 | 0.11.14 | |
16.18.0 | 0.12.150.11.13 | ||
18.11.0 | 16.17.1 | 0.12.14 | 0.11.12 |
18.10.0 | 16.17.0 | 0.12.13 | 0.11.11 |
18.9.1 | 16.16.00.12.12 | 0.11.10 | |
16.15.1 | 0.12.11 0.11.9 | ||
16.15.0 | 0.12.100.11.8 | ||
16.14.2 | 0.12.9 0.11.7 | ||
16.14.1 | 0.12.8 0.11.6 | ||
16.14.0 | 0.12.70.11.5 | ||
16.13.2 | 0.12.6 0.11.4 | ||
16.13.1 | 0.12.5 0.11.3 | ||
16.13.0 | 0.12.40.11.2 | ||
14.21.1 | 0.12.3 | 0.11.1 | |
14.21.0 | 0.12.2 | 0.11.0 | |
14.20.1 | 0.12.10.9.12 | ||
0.9.11 | |||
17.8.0 | 14.19.3 | 0.10.480.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.json
scripts
部分下针对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 将工作。
- 使用节点版本
16.12.0
。如果您使用的是 nvm,请设置默认值 节点版本到16.12.0
。您可以使用以下命令
nvm alias default 16.12.0
- 删除
node_modules
文件夹。您可以使用以下命令:
rm -rf node_modules
- 再次运行安卓运行命令
只是把它扔在那里。如果您在 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 -v
和nodejs -v
检查您的终端
卸载节点
sudo apt-get uninstall nodejs
你很好去!