/ng-cli-hooks

Hooks for the angular-cli

Primary LanguageTypeScriptMIT LicenseMIT

ng-cli-hooks

MIT License npm version npm downloads Known Vulnerabilities

Buy me a coffee

Hooks for the angular-cli

Unfortunately I don't have much time to take care of this project, so please contribute when new versions of Angular are released. As an alternative to this package, I recommend taking a look at the angular-builders repo. They are much faster when new Angular versions are released.

This documentation is for version 16 only

Documentation for other versions could be found here:

Getting Started

Install the package:

npm install --save-dev ng-cli-hooks

Update your angular.json file:

{
  ...
  "projects": {
    "app": {
      ...
      "architect": {
        "build": {
          "builder": "ng-cli-hooks:browser",
          "options": {
            "optionsHook": "hooks/options.js",
            "webpackHook": "hooks/webpack.js",
            "indexHtmlHook": "hooks/index-html.js",
            ...

This Plugin contains hookable builders for

  • browser
  • dev-server
  • server

Hooks

Currently this plugin contains three different hooks: optionsHook, webpackHook and indexHtmlHook.

optionsHook

This hook modifies the options for the builder at build-time.

Example: hooks/options.js

module.exports = function (options) {
    if (process.env.APP_BRANDING) {
        var branding = process.env.APP_BRANDING.trim();
        if (options.assets) {
            options.assets = options.assets.map(asset => {
                if (asset.input === 'src/assets') {
                    asset.input = `src/branding/${branding}/assets`;
                }
                return asset;
            });
        }
    }

    return options;
}

indexHtmlHook

This hook modifies the generated index.html at build-time. It is only available for the builders browser and dev-server.

Example: hooks/index-html.js

module.exports = function(content, options) {
    content = content.replace('Ionic App', 'Example App');
    return content;
}

webpackHook

This hook can be used to modify the generated webpack-config of angular-cli or to replace it.

Modify the generated webpack-config

During the development of this hook it may be necessary to clear the Angular cache.

Example: hooks/webpack.js

function replaceAngularCompilerPlugin(plugins) {
  const plugin = plugins.find(p => p.pluginOptions && p.pluginOptions.directTemplateLoading);
  const options = plugin.pluginOptions;
  options.directTemplateLoading = false;
}

module.exports = function (generatedWebpackConfig, options) {  
  generatedWebpackConfig.module.rules.unshift({
    test: /\.html$/,
    loader: 'string-replace-loader',
    options: {
        search: /Welcome/ig,
        replace: () => 'Welcome to ng-cli-hooks',
        flags: 'g'
    }
  });

  replaceAngularCompilerPlugin(generatedWebpackConfig.plugins);

  return generatedWebpackConfig;
}

Replace the generated webpack-config

If hooks/webpack.js exports a webpack-config-object, than the generated webpack-config will be replaced by your own.

Changelog

16.0.0

  • Support for Angular 16

15.0.0

  • Support for Angular 15

13.0.0

  • Support for Angular 13

12.0.0

  • Support for Angular 12

11.0.0

  • Support for Angular 11

8.0.0

  • Support for Angular 8
  • Removed builders for extract-i18n and cordova-build
  • Added indexHtmlHook to hook into the index.html build.

7.0.0

  • Major version of ng-cli-hooks now equals the Angular version (use ng-cli-hooks@7.x.x to work with Angular 7.x.x)

1.1.0

  • added ng-cli-hooks:cordova-build for Ionic 4 projects.