Class FrontendTools


  • public class FrontendTools
    extends Object
    Provides access to frontend tools (node.js and npm, pnpm) and optionally installs the tools if needed.

    WARNING: This class is intended for internal usage only. May be renamed or removed in a future release.

    Author:
    Vaadin Ltd
    • Constructor Detail

      • FrontendTools

        public FrontendTools​(FrontendToolsSettings settings)
        Creates an instance of the class using the baseDir as a base directory to locate the tools and the directory returned by the alternativeDirGetter as a directory to install tools if they are not found and use it as an alternative tools location.

        If alternativeDir is null tools 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

        public FrontendTools​(ApplicationConfiguration applicationConfiguration,
                             File projectRoot)
        Creates an instance using the the given project directory and application configuration.
        Parameters:
        projectRoot - the project root directory
        applicationConfiguration - the configuration for the application
      • FrontendTools

        @Deprecated
        public FrontendTools​(String baseDir,
                             Supplier<String> alternativeDirGetter)
        Deprecated.
        use FrontendTools(FrontendToolsSettings) instead, as it simplifies configuring the frontend tools and gives the default values to configuration parameters.
        Creates an instance of the class using the baseDir as a base directory to locate the tools and the directory returned by the alternativeDirGetter as a directory to install tools if they are not found and use it as an alternative tools location.

        If alternativeDir is null tools won't be installed.

        Parameters:
        baseDir - the base directory to locate the tools, not null
        alternativeDirGetter - the getter for a directory where tools will be installed if they are not found globally or in the baseDir, may be null
      • FrontendTools

        @Deprecated
        public FrontendTools​(String baseDir,
                             Supplier<String> alternativeDirGetter,
                             boolean forceAlternativeNode)
        Deprecated.
        use FrontendTools(FrontendToolsSettings) instead, as it simplifies configuring the frontend tools and gives the default values to configuration parameters.
        Creates an instance of the class using the baseDir as a base directory to locate the tools and the directory returned by the alternativeDirGetter as a directory to install tools if they are not found and use it as an alternative tools location.

        If alternativeDir is null tools won't be installed.

        Parameters:
        baseDir - the base directory to locate the tools, not null
        alternativeDirGetter - the getter for a directory where tools will be installed if they are not found globally or in the baseDir, may be null
        forceAlternativeNode - force usage of node executable from alternative directory
      • FrontendTools

        @Deprecated
        public FrontendTools​(String baseDir,
                             Supplier<String> alternativeDirGetter,
                             String nodeVersion,
                             URI nodeDownloadRoot)
        Deprecated.
        use FrontendTools(FrontendToolsSettings) instead, as it simplifies configuring the frontend tools and gives the default values to configuration parameters.
        Creates an instance of the class using the baseDir as a base directory to locate the tools and the directory returned by the alternativeDirGetter as a directory to install tools if they are not found and use it as an alternative tools location.

        If alternativeDir is null tools won't be installed.

        Parameters:
        baseDir - the base directory to locate the tools, not null
        alternativeDirGetter - the getter for a directory where tools will be installed if they are not found globally or in the baseDir, may be null
        nodeVersion - The node.js version to be used when node.js is installed automatically by Vaadin, for example "v16.0.0". Use "v16.14.2" 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. Use NodeInstaller.DEFAULT_NODEJS_DOWNLOAD_ROOT by default.
      • FrontendTools

        @Deprecated
        public FrontendTools​(String baseDir,
                             Supplier<String> alternativeDirGetter,
                             String nodeVersion,
                             URI nodeDownloadRoot,
                             boolean forceAlternativeNode,
                             boolean useGlobalPnpm)
        Deprecated.
        use FrontendTools(FrontendToolsSettings) instead, as it simplifies configuring the frontend tools and gives the default values to configuration parameters.
        Creates an instance of the class using the baseDir as a base directory to locate the tools and the directory returned by the alternativeDirGetter as a directory to install tools if they are not found and use it as an alternative tools location.

        If alternativeDir is null tools won't be installed.

        Parameters:
        baseDir - the base directory to locate the tools, not null
        alternativeDirGetter - the getter for a directory where tools will be installed if they are not found globally or in the baseDir, may be null
        nodeVersion - The node.js version to be used when node.js is installed automatically by Vaadin, for example "v16.0.0". Use "v16.14.2" 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. Use NodeInstaller.DEFAULT_NODEJS_DOWNLOAD_ROOT by default.
        forceAlternativeNode - force usage of node executable from alternative directory
        useGlobalPnpm - use globally installed pnpm instead of the default one (see DEFAULT_PNPM_VERSION)
      • FrontendTools

        @Deprecated
        public FrontendTools​(String baseDir,
                             Supplier<String> alternativeDirGetter,
                             String nodeVersion,
                             URI nodeDownloadRoot,
                             boolean forceAlternativeNode,
                             boolean useGlobalPnpm,
                             boolean autoUpdate)
        Deprecated.
        use FrontendTools(FrontendToolsSettings) instead, as it simplifies configuring the frontend tools and gives the default values to configuration parameters.
        Creates an instance of the class using the baseDir as a base directory to locate the tools and the directory returned by the alternativeDirGetter as a directory to install tools if they are not found and use it as an alternative tools location.

        If alternativeDir is null tools won't be installed.

        Parameters:
        baseDir - the base directory to locate the tools, not null
        alternativeDirGetter - the getter for a directory where tools will be installed if they are not found globally or in the baseDir, may be null
        nodeVersion - The node.js version to be used when node.js is installed automatically by Vaadin, for example "v16.0.0". Use "v16.14.2" 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. Use NodeInstaller.DEFAULT_NODEJS_DOWNLOAD_ROOT by default.
        forceAlternativeNode - force usage of node executable from alternative directory
        useGlobalPnpm - use globally installed pnpm instead of the default one (see DEFAULT_PNPM_VERSION)
        autoUpdate - update node in alternativeDirGetter if version older than the current default "v16.14.2"
    • Method Detail

      • getNodeExecutable

        public String getNodeExecutable()
        Locate node executable.
        Returns:
        the full path to the executable
      • forceAlternativeNodeExecutable

        public String forceAlternativeNodeExecutable()
        Locate node executable 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. The forceAlternativeNodeExecutable() 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:
        getNodeExecutable()
      • getNpmExecutable

        public List<String> getNpmExecutable()
        Locate npm executable.
        Returns:
        the list of all commands in sequence that need to be executed to have npm running
      • getPnpmExecutable

        public List<String> getPnpmExecutable()
        Locate pnpm executable.

        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
      • 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.
      • installNode

        protected String installNode​(String nodeVersion,
                                     URI downloadRoot)
        Install node and npm.
        Parameters:
        nodeVersion - node version to install
        downloadRoot - optional download root for downloading node. May be a filesystem file or a URL see NodeInstaller.setNodeDownloadRoot(URI).
        Returns:
        node installation path
      • getProxies

        protected List<ProxyConfig.Proxy> 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
      • getWebpackNodeEnvironment

        public Map<String,​String> getWebpackNodeEnvironment()
        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

        public String 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