npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@o3r/ngx-prefetch

v19.0.0

Published

Angular builder for prefetching resources before loading the application

Downloads

18,614

Readme

Description

In some cases, it is possible to prefetch the resources of an application before actually loading the application itself. For example, if the application can be accessed through a static web page or another web application.

The prefetch builder generates a ngxPrefetch.js file that should be included in the HTML page of the entry point. When run, it dynamically creates <link> tags for each resource (such as JS and CSS files) so that the browser can prefetch them during idle times. This will improve the Page Load Time of the application when it is accessed for the first time. Then, the browser caching will take over until a new version of the application is deployed or the browser cache is cleared.

Prerequisites

A prerequisite for the script is to have Angular Service Worker enabled as it is using the ngsw.json from the production build folder that is generated by the Angular Service Worker. Therefore, it will be run after the build prod.

Install

npm install -D @o3r/ngx-prefetch

OR

ng add @o3r/ngx-prefetch

NOTE: This library is following the Angular release cycle. For instance, if you are using Angular 13, use a 13.x version of the library:

npm install -D @o3r/ngx-prefetch@13

OR

ng add @o3r/ngx-prefetch@13

Get started

  1. By running the ng add command above, the following lines should have been added to the application's angular.json:
"generate-prefetch": {
    "builder": "@o3r/ngx-prefetch:run",
    "options": {
        "targetBuild": "app-name:build:production"
    }
},

NOTE: Additional configuration can be added to the angular.json (builder options are described below with an example of full configuration).

  1. Then, add a command to the package.json to run generate-prefetch:
"generate:prefetch": "ng run app-name:generate-prefetch"
  1. Run the ng build command with the production configuration. The default configuration of the build command should be production, otherwise it should be specified:
...
"build:prod": "ng build --configuration production",
...
  1. Run the previously defined generate:prefetch command.

How it works

Please refer to the details on how the ngx-prefetch works here.

Builder options

  • targetBuild Mandatory The target build where prefetch should be applied. Used for identifying the outputPath of the build.

  • resourceTypes An object describing the resource types that should be prefetched. The valid values for the type of content can be found here.

  • crossorigin Flag that sets the crossorigin attribute on links. If true it will be set for all prefetched resources.

  • production Flag for creating a production (minified) version of the js file or a development one.

  • staticsFullPath By default the prefetched resources are hosted next to the ngxPrefetch.js file, on the same server. If this is not the case, you can configure the full path of the resources that will be prefetched (ex: https://my-web-app.com/path/to/my-app/). It is also possible to set this value at runtime. Instead of setting it in the Builder's options, you can search for {STATICS_FULL_PATH} and replace it on the server side in order to inject a path.

  • localizationPattern Pattern for the relative path of the localization file. By default, the pattern corresponds to the JSON file in a folder called localizations: "localizations/${language}.json". If the localization pattern contains the ${language} variable, the language value must be set (as explained here), and it will be replaced by the server.

  • fallbackLocalesMap Mapping of fallback locales (only available if there is dynamic content in the application), in case the localization file of the input language cannot be found. First, a search for an exact match of the input language will be done in the fallbackLocalesMap. If not found and the input language parameter is of type locale, a search for the shortened version of the locale (for example, search for en if the input language is en-GB) will be done. If this is not found either, a search for the default locale * will be searched for. If none of these are found within the dynamic content files, the localization file will not be prefetched. You can find a detailed example below.

  • outputPath Path to the folder of ngsw.json in the production build output. If not defined, will try to compute it from the executor options.

Example of full configuration

[angular.json: full configuration]

"generate-prefetch": {
    "builder": "@o3r/ngx-prefetch:run",
    "options": {
        "targetBuild": "my-app:build:production",
        "resourceTypes": {
            "image": ["png", "jpg", "gif"],
            "font": ["eot", "ttf", "woff", "woff2", "svg"],
            "style": ["css"],
            "script": ["js"],
            "document": ["html"]
        },
        "crossorigin": true,
        "production": false,
        "staticsFullPath": "https://my-web-app.com/path/to/my-app/",
        "localizationPattern": "localizations/${language}.json",
        "outputPath": "dist",
        "fallbackLocalesMap": {
            "fr-CA": "fr-FR",
            "de": "de-DE",
            "*": "en-GB"
        }
    }
}

Example of fallback locale

Let's assume you have the fallbackLocalesMap above in your configuration and three localization files in your assets: fr-FR.json, de-DE.json, and en-GB.json. If your language parameter is equal to:

  • fr-FR: you will prefetch this file directly
  • fr-CA: you will fallback to fr-FR
  • de-AT: you will fallback to de-DE
  • it-IT: you will fallback to en-GB (the default fallback locale)