我在 Mac 上尝试运行旧的 React Native 项目(版本 0.67)时遇到问题。该问题似乎与 OpenSSL 有关,并且在使用 Node.js 版本 18 时发生,这是我系统上的默认版本。但是,当我使用 nvm 切换到 Node.js 版本 16 时,项目运行没有任何问题。
这是我迄今为止尝试过的:
nvm use v16.20.1
和 nvm alias default v16.20.1
使用 nvm 切换到 Node.js 版本 16。这样就成功了
让我可以毫无错误地运行该项目。现在,我的机器上有多个项目,其中一些需要 Node.js 18。使用 nvm 在 Node.js 版本之间来回切换变得很麻烦。有没有办法配置这个特定的 React Native 项目在运行时使用 Node.js 版本 16,同时保留我的其他项目使用 Node.js 版本 18?
任何有关如何为 React Native 项目设置特定 Node.js 版本的指导将不胜感激。谢谢!
我使用 NVM 来管理许多 React-Native 项目的节点版本。我发现,当从终端启动项目时,metro 将开始使用别名默认节点版本,而不是
nvm use
指定的版本。
因此,在启动特定项目之前,我将确保同时运行这两个项目(例如):
nvm alias default v18.18.0
nvm use v18.18.0
如果我需要换回其他版本,我会做同样的事情:
nvm alias default v16.16.0
nvm use v16.16.0
我使用
nvm list
来验证我的设置是否正确。
好消息是,几乎所有编辑器都允许您将节点版本设置为默认值,并为同一项目运行该版本的 NodeJS,无需第三方软件。
以WebStorm IDE为例: 设置 -> 语言和框架 -> Node.js -> 此设置的节点版本 -> 应用并确定。
scripts: {
"preinstall": "nvm install 0.12.1",
"prestart": "nvm use 0.12.1", // <= This will install the correct node version before starting
"start": "node ./file1.js"
},
以下选项可能无关紧要 - 我不是
nvm
用户,因此不知道配置,但您可以 在 .npmrc 文件中设置每个项目的节点版本。
其他选项:
Docker(或其他容器系统或虚拟机)是一个很好的解决方案,也是处理生产中特定运行时版本要求的常用方法。
使用 OpenSSL 旧版提供程序也是一种选择,但我不建议长期这样做,因为它将来可能不受支持,并且可能会导致安全问题。
另一种选择是将 Node 本身安装为本地依赖项。您可以通过安装特定版本来使用包 node 来做到这一点。这是一个很棘手的解决方法,但由于从事该工作的人们,它似乎值得信赖。
为了在 React Native 项目中使用特定版本的 Node,您可以在 app/build.gradle 文件根级别的 project.ext.react 配置中进行设置,如下所示:
project.ext.react = [
...
nodeExecutableAndArgs: ['/path/to/your/node'],
...
]
例如,在 Mac 中使用 nvm,您可以使用类似以下内容:
project.ext.react = [
...
nodeExecutableAndArgs: ['/Users/pablo.bayon/.nvm/versions/node/v16.13.0/bin/node'],
...
]