[REF-2086] Avoid "Warning: The path to the Node binary could not be found. (#2803)
This commit is contained in:
parent
d14292dc9b
commit
f52ff56440
10
.github/workflows/integration_tests.yml
vendored
10
.github/workflows/integration_tests.yml
vendored
@ -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 }}
|
||||
|
@ -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(
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user