feature: Auto install node by nvm on Linux (#1404)
This commit is contained in:
parent
57ec6d0d5a
commit
0a25859255
@ -116,6 +116,18 @@ BUN_ROOT_PATH = "$HOME/.bun"
|
|||||||
BUN_PATH = get_value("BUN_PATH", f"{BUN_ROOT_PATH}/bin/bun")
|
BUN_PATH = get_value("BUN_PATH", f"{BUN_ROOT_PATH}/bin/bun")
|
||||||
# Command to install bun.
|
# Command to install bun.
|
||||||
INSTALL_BUN = f"curl -fsSL https://bun.sh/install | bash -s -- bun-v{MAX_BUN_VERSION}"
|
INSTALL_BUN = f"curl -fsSL https://bun.sh/install | bash -s -- bun-v{MAX_BUN_VERSION}"
|
||||||
|
# Command to install nvm.
|
||||||
|
INSTALL_NVM = (
|
||||||
|
"curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash"
|
||||||
|
)
|
||||||
|
# nvm root location.
|
||||||
|
NVM_ROOT_PATH = f"$HOME/.nvm"
|
||||||
|
# The default path where node is installed.
|
||||||
|
NODE_PATH = get_value(
|
||||||
|
"NODE_PATH", f"{NVM_ROOT_PATH}/versions/node/v{MIN_NODE_VERSION}/bin/node"
|
||||||
|
)
|
||||||
|
# Command to install node.
|
||||||
|
INSTALL_NODE = f". {NVM_ROOT_PATH}/nvm.sh && nvm install {MIN_NODE_VERSION}"
|
||||||
# Default host in dev mode.
|
# Default host in dev mode.
|
||||||
BACKEND_HOST = get_value("BACKEND_HOST", "0.0.0.0")
|
BACKEND_HOST = get_value("BACKEND_HOST", "0.0.0.0")
|
||||||
# The default timeout when launching the gunicorn server.
|
# The default timeout when launching the gunicorn server.
|
||||||
|
@ -44,6 +44,7 @@ def init(
|
|||||||
console.rule(f"[bold]Initializing {app_name}")
|
console.rule(f"[bold]Initializing {app_name}")
|
||||||
# Set up the web directory.
|
# Set up the web directory.
|
||||||
prerequisites.validate_and_install_bun()
|
prerequisites.validate_and_install_bun()
|
||||||
|
prerequisites.validate_and_install_node()
|
||||||
prerequisites.initialize_web_directory()
|
prerequisites.initialize_web_directory()
|
||||||
|
|
||||||
# Migrate Pynecone projects to Reflex.
|
# Migrate Pynecone projects to Reflex.
|
||||||
|
@ -73,18 +73,9 @@ def get_package_manager() -> str:
|
|||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
FileNotFoundError: If bun or npm is not installed.
|
FileNotFoundError: If bun or npm is not installed.
|
||||||
Exit: If the app directory is invalid.
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
config = get_config()
|
config = get_config()
|
||||||
|
|
||||||
# Check that the node version is valid.
|
|
||||||
if not check_node_version():
|
|
||||||
console.print(
|
|
||||||
f"[red]Node.js version {constants.MIN_NODE_VERSION} or higher is required to run Reflex."
|
|
||||||
)
|
|
||||||
raise typer.Exit()
|
|
||||||
|
|
||||||
# On Windows, we use npm instead of bun.
|
# On Windows, we use npm instead of bun.
|
||||||
if platform.system() == "Windows" or config.disable_bun:
|
if platform.system() == "Windows" or config.disable_bun:
|
||||||
npm_path = path_ops.which("npm")
|
npm_path = path_ops.which("npm")
|
||||||
@ -276,6 +267,47 @@ def remove_existing_bun_installation():
|
|||||||
path_ops.rm(os.path.expandvars(constants.BUN_ROOT_PATH))
|
path_ops.rm(os.path.expandvars(constants.BUN_ROOT_PATH))
|
||||||
|
|
||||||
|
|
||||||
|
def validate_and_install_node():
|
||||||
|
"""Validate nodejs have install or not."""
|
||||||
|
if not check_node_version():
|
||||||
|
install_node()
|
||||||
|
|
||||||
|
|
||||||
|
def install_node():
|
||||||
|
"""Install nvm and nodejs onto the user's system.
|
||||||
|
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
FileNotFoundError: if unzip or curl packages are not found.
|
||||||
|
Exit: if installation failed
|
||||||
|
"""
|
||||||
|
if platform.system() != "Windows":
|
||||||
|
# Only install if bun is not already installed.
|
||||||
|
console.log("Installing nvm...")
|
||||||
|
|
||||||
|
# Check if curl is installed
|
||||||
|
curl_path = path_ops.which("curl")
|
||||||
|
if curl_path is None:
|
||||||
|
raise FileNotFoundError("Reflex requires curl to be installed.")
|
||||||
|
|
||||||
|
result = subprocess.run(constants.INSTALL_NVM, shell=True)
|
||||||
|
|
||||||
|
if result.returncode != 0:
|
||||||
|
raise typer.Exit(code=result.returncode)
|
||||||
|
|
||||||
|
console.log("Installing node...")
|
||||||
|
result = subprocess.run(constants.INSTALL_NODE, shell=True)
|
||||||
|
|
||||||
|
if result.returncode != 0:
|
||||||
|
raise typer.Exit(code=result.returncode)
|
||||||
|
|
||||||
|
else:
|
||||||
|
console.print(
|
||||||
|
f"[red]Node.js version {constants.MIN_NODE_VERSION} or higher is required to run Reflex."
|
||||||
|
)
|
||||||
|
raise typer.Exit()
|
||||||
|
|
||||||
|
|
||||||
def install_bun():
|
def install_bun():
|
||||||
"""Install bun onto the user's system.
|
"""Install bun onto the user's system.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user