Class FrontendTools
WARNING: This class is intended for internal usage only. May be renamed or removed in a future release.
- Author:
- Vaadin Ltd
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringThis is the version that is installed if there is no node installed or the installed version is older thanSUPPORTED_NODE_VERSION, i.e.static final StringThis is the version shipped with the default Node version.static final Stringstatic final Stringstatic final String -
Constructor Summary
ConstructorsConstructorDescriptionFrontendTools(FrontendToolsSettings settings) Creates an instance of the class using thebaseDiras a base directory to locate the tools and the directory returned by thealternativeDirGetteras a directory to install tools if they are not found and use it as an alternative tools location.FrontendTools(ApplicationConfiguration applicationConfiguration, File projectRoot) Creates an instance using the the given project directory and application configuration.FrontendTools(String baseDir, Supplier<String> alternativeDirGetter, String nodeVersion, URI nodeDownloadRoot, boolean forceAlternativeNode, boolean useGlobalPnpm, boolean autoUpdate) Deprecated. -
Method Summary
Modifier and TypeMethodDescriptionLocatenodeexecutable from the alternative directory given.Locatebunexecutable.Gets a path to the used node binary.Locatenodeexecutable.Gets the version of the node executable.Locatenpmexecutable.getNpmPackageExecutable(String packageName, String binName, File cwd) Gives a path to the executable (bin) JS file of the given package using the native node resolution mechanism.Executesnpm --versionto and parses the result.Locatepnpmexecutable.protected List<ProxyConfig.Proxy> Read list of configured proxies in order from system properties, .npmrc file in the project root folder, .npmrc file in user root folder and system environment variables.Deprecated, for removal: This API element is subject to removal in a future version.Webpack is not used anymore, this method is obsolete and have no replacements.protected StringinstallNode(String nodeVersion, URI downloadRoot) Install node and npm.voidValidate that the found node and npm versions are new enough.
-
Field Details
-
DEFAULT_NODE_VERSION
This is the version that is installed if there is no node installed or the installed version is older thanSUPPORTED_NODE_VERSION, i.e. 24.0.- See Also:
-
DEFAULT_NPM_VERSION
This is the version shipped with the default Node version.- See Also:
-
DEFAULT_PNPM_VERSION
- See Also:
-
INSTALL_NODE_LOCALLY
- See Also:
-
NPM_BIN_PATH
-
-
Constructor Details
-
FrontendTools
Creates an instance of the class using thebaseDiras a base directory to locate the tools and the directory returned by thealternativeDirGetteras a directory to install tools if they are not found and use it as an alternative tools location.If
alternativeDirisnulltools won't be installed.Note: settings for this object can not be changed through the settings object after creation.
- Parameters:
settings- tooling settings to use
-
FrontendTools
Creates an instance using the the given project directory and application configuration.- Parameters:
applicationConfiguration- the configuration for the applicationprojectRoot- the project root directory
-
FrontendTools
@Deprecated public FrontendTools(String baseDir, Supplier<String> alternativeDirGetter, String nodeVersion, URI nodeDownloadRoot, boolean forceAlternativeNode, boolean useGlobalPnpm, boolean autoUpdate) Deprecated.useFrontendTools(FrontendToolsSettings)instead, as it simplifies configuring the frontend tools and gives the default values to configuration parameters.Creates an instance of the class using thebaseDiras a base directory to locate the tools and the directory returned by thealternativeDirGetteras a directory to install tools if they are not found and use it as an alternative tools location.If
alternativeDirisnulltools won't be installed.- Parameters:
baseDir- the base directory to locate the tools, notnullalternativeDirGetter- the getter for a directory where tools will be installed if they are not found globally or in thebaseDir, may benullnodeVersion- The Node.js version to be used when Node.js is installed automatically by Vaadin, for example"v16.0.0". Use "v24.10.0" by default.nodeDownloadRoot- Download Node.js from this URL. Handy in heavily firewalled corporate environments where the Node.js download can be provided from an intranet mirror. UseNodeInstaller.DEFAULT_NODEJS_DOWNLOAD_ROOTby default.forceAlternativeNode- force usage of node executable from alternative directoryuseGlobalPnpm- use globally installed pnpm instead of the default one (seeDEFAULT_PNPM_VERSION)autoUpdate- update node inalternativeDirGetterif version older than the current default "v24.10.0"
-
-
Method Details
-
getNodeExecutable
Locatenodeexecutable.- Returns:
- the full path to the executable
-
forceAlternativeNodeExecutable
Locatenodeexecutable from the alternative directory given.The difference between
getNodeExecutable()and this method in a search algorithm:getNodeExecutable()first searches executable in the base/alternative directory and fallbacks to the globally installed if it's not found there. TheforceAlternativeNodeExecutable()doesn't search for globally installed executable. It tries to find it in the installation directory and if it's not found it downloads and installs it there.- Returns:
- the full path to the executable
- See Also:
-
getNpmExecutable
Locatenpmexecutable.- Returns:
- the list of all commands in sequence that need to be executed to have npm running
-
getPnpmExecutable
Locatepnpmexecutable.In case pnpm is not available it will be installed.
- Returns:
- the list of all commands in sequence that need to be executed to have pnpm running
-
getBunExecutable
Locatebunexecutable.- Returns:
- the list of all commands in sequence that need to be executed to have bun running
-
validateNodeAndNpmVersion
public void validateNodeAndNpmVersion()Validate that the found node and npm versions are new enough. Throws an exception with a descriptive message if a version is too old. -
getNodeVersion
Gets the version of the node executable.- Returns:
- the version of the node executable
- Throws:
FrontendUtils.UnknownVersionException- if the node version cannot be determined
-
installNode
Install node and npm.- Parameters:
nodeVersion- node version to installdownloadRoot- optional download root for downloading node. May be a filesystem file or a URL seeNodeInstaller.setNodeDownloadRoot(URI).- Returns:
- node installation path
-
getProxies
Read list of configured proxies in order from system properties, .npmrc file in the project root folder, .npmrc file in user root folder and system environment variables.- Returns:
- list of configured proxies
-
getNpmVersion
Executesnpm --versionto and parses the result.- Returns:
- the version of npm.
- Throws:
FrontendUtils.UnknownVersionException- if the npm command fails or returns unexpected output.
-
getNpmPackageExecutable
public Path getNpmPackageExecutable(String packageName, String binName, File cwd) throws FrontendUtils.CommandExecutionException Gives a path to the executable (bin) JS file of the given package using the native node resolution mechanism.- Parameters:
packageName- the name of the package.binName- the name of the specific executable.cwd- the current working directory.- Returns:
- the path to the executable.
- Throws:
FrontendUtils.CommandExecutionException- if the node resolution fails.
-
getWebpackNodeEnvironment
Deprecated, for removal: This API element is subject to removal in a future version.Webpack is not used anymore, this method is obsolete and have no replacements.Returns flags required to pass to Node for Webpack to function. Determine whether webpack requires Node.js to be started with the --openssl-legacy-provider parameter. This is a webpack 4 workaround of the issue https://github.com/webpack/webpack/issues/14532 See: https://github.com/vaadin/flow/issues/12649- Returns:
- the flags
-
getNodeBinary
Gets a path to the used node binary. The return value can be used when executing node commands, as the first part of a process builder command.- Returns:
- the path to the node binary
-
FrontendTools(FrontendToolsSettings)instead, as it simplifies configuring the frontend tools and gives the default values to configuration parameters.