[REF-2086] Avoid "Warning: The path to the Node binary could not be found. (#2803)

This commit is contained in:
Masen Furer 2024-03-13 12:35:43 -07:00 committed by GitHub
parent d14292dc9b
commit f52ff56440
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 25 additions and 18 deletions

View File

@ -36,7 +36,6 @@ jobs:
matrix:
# Show OS combos first in GUI
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: ['16.x']
python-version: ['3.8.18', '3.9.18', '3.10.13', '3.11.5', '3.12.0']
exclude:
- os: windows-latest
@ -56,10 +55,6 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- uses: ./.github/actions/setup_build_env
with:
python-version: ${{ matrix.python-version }}
@ -104,17 +99,12 @@ jobs:
# Show OS combos first in GUI
os: [ubuntu-latest, windows-latest, macos-latest]
python-version: ['3.10.10', '3.11.4']
node-version: ['16.x']
env:
REFLEX_WEB_WINDOWS_OVERRIDE: '1'
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- uses: ./.github/actions/setup_build_env
with:
python-version: ${{ matrix.python-version }}

View File

@ -71,7 +71,7 @@ class Node(SimpleNamespace):
# The Node version.
VERSION = "18.17.0"
# The minimum required node version.
MIN_VERSION = "16.8.0"
MIN_VERSION = "18.17.0"
# The node bin path.
BIN_PATH = os.path.join(

View File

@ -34,6 +34,8 @@ from reflex.compiler import templates
from reflex.config import Config, get_config
from reflex.utils import console, path_ops, processes
CURRENTLY_INSTALLING_NODE = False
def check_latest_package_version(package_name: str):
"""Check if the latest version of the package is installed.
@ -103,8 +105,11 @@ def get_node_version() -> version.Version | None:
Returns:
The version of node.
"""
node_path = path_ops.get_node_path()
if node_path is None:
return None
try:
result = processes.new_process([path_ops.get_node_path(), "-v"], run=True)
result = processes.new_process([node_path, "-v"], run=True)
# The output will be in the form "vX.Y.Z", but version.parse() can handle it
return version.parse(result.stdout) # type: ignore
except (FileNotFoundError, TypeError):
@ -615,6 +620,11 @@ def install_node():
console.debug("")
return
# Skip installation if check_node_version() checks out
if check_node_version():
console.debug("Skipping node installation as it is already installed.")
return
path_ops.mkdir(constants.Fnm.DIR)
if not os.path.exists(constants.Fnm.EXE):
download_and_extract_fnm_zip()
@ -631,10 +641,6 @@ def install_node():
],
)
else: # All other platforms (Linux, MacOS).
# TODO we can skip installation if check_node_version() checks out
if check_node_version():
console.debug("Skipping node installation as it is already installed.")
return
# Add execute permissions to fnm executable.
os.chmod(constants.Fnm.EXE, stat.S_IXUSR)
# Install node.
@ -935,8 +941,12 @@ def initialize_frontend_dependencies():
"""Initialize all the frontend dependencies."""
# validate dependencies before install
validate_frontend_dependencies()
# Avoid warning about Node installation while we're trying to install it.
global CURRENTLY_INSTALLING_NODE
CURRENTLY_INSTALLING_NODE = True
# Install the frontend dependencies.
processes.run_concurrently(install_node, install_bun)
CURRENTLY_INSTALLING_NODE = False
# Set up the web directory.
initialize_web_directory()

View File

@ -135,13 +135,20 @@ def new_process(args, run: bool = False, show_logs: bool = False, **kwargs):
Returns:
Execute a child program in a new process.
Raises:
Exit: When attempting to run a command with a None value.
"""
node_bin_path = path_ops.get_node_bin_path()
if not node_bin_path:
if not node_bin_path and not prerequisites.CURRENTLY_INSTALLING_NODE:
console.warn(
"The path to the Node binary could not be found. Please ensure that Node is properly "
"installed and added to your system's PATH environment variable."
"installed and added to your system's PATH environment variable or try running "
"`reflex init` again."
)
if None in args:
console.error(f"Invalid command: {args}")
raise typer.Exit(1)
# Add the node bin path to the PATH environment variable.
env = {
**os.environ,