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

mutable-webpack-angular-builder

v1.0.3

Published

Allows to mutate the webpack configuration before is being used by @angular-devkit/build-angular:browser

Downloads

12

Readme

Mutable Webpack Angular Builder

license GitHub package.json version coverage

mutable-webpack-angular-builder allows to freely modified the Webpack configuration generated before Angular ng use it for building.

This project is licensed under the terms of the MIT license.

Quick Start

package.json:

  ..
  "devDependencies": {
    "@angular-devkit/build-angular": "*",
    "mutable-webpack-angular-builder": "1.0.0",
    ..

angular.json:

  ..
  "architect": {
    "build": {
      "builder": "mutable-webpack-angular-builder:browser",
      "options": {
        "mutatorFile": "webpack.config.mutator.js",
    ..

webpack.config.mutator.js:

module.exports = (sourceWebpack) => {
  const filteredRules = sourceWebpack.module.rules.filter(
    (rule) => !rule.test instanceof RegExp || !rule.test.test('.css')
  )
  sourceWebpack.module.rules = filteredRules

  return sourceWebpack
}

Goal

Many things in Angular Ng processes are hard-coded and it is difficult to do some advanced customization[1]. The purpose of mutable-webpack-angular-builder is to allow for fully modification of the Webpack Configuration provided by Angular for more "advanced" uses.

[1] Angular Ng processes are quite closed (and documentation is sometimes scattered and with a lot of "WIP").
There are other builders like @angular-builders/custom-webpack, which allows only to do merging of Webpack options.

Using/Configuration

Prerequisites

  • @angular-devkit/build-angular.

Configuration

1 . Add mutable-webpack-angular-builder (and prerequisite) to package.json:

  ..
  "devDependencies": {
    "@angular-devkit/build-angular": "*",
    "mutable-webpack-angular-builder": "1.0.0",
    ..

2 . Set builder to mutable-webpack-angular-builder in angular.json:

  ..
  "architect": {
    "build": {
      "builder": "mutable-webpack-angular-builder:browser",
    ..

Usually set as "builder": "@angular-devkit/build-angular:browser".

3 . Add "mutatorFile" option to the builder to indicate the file that will contain the function that mutates the Webpack configuration:

  ..
    "build": {
      "builder": "mutable-webpack-angular-builder:browser",
      "options": {
        "mutatorFile": "webpack.config.mutator.js",
    ..

mutatorFile option is an additional option introduced by mutable-webpack-angular-builder.
If the option is not defined, then mutable-webpack-angular-builder:browser will silently "fail", i.e. no mutation will be applied.

4 . Create the function that mutates the Webpack configuration:

(sourceWebpack) => {

  // do something with the Original Webpack Configuration

  return sourceWebpack // return the Modified Webpack Configuration
}

E.g: The following removes some module rules that do not work quite well with React, and add some new rules (not shown)

(sourceWebpack) => {
  const filteredRules = sourceWebpack.module.rules.filter(
    (rule) => !rule.test instanceof RegExp || !rule.test.test('.css')
  )
  filteredRules.push(reactRule)
  filteredRules.push(cssRule)

  sourceWebpack.module.rules = filteredRules

  return sourceWebpack
}

For an actual use example, see basecode-ionic-react project

5 . Export the mutator function using CommonJs (which is what is use by Angular Ng to load this):

webpack.config.mutator.js:

module.exports = (sourceWebpack) => {
  // do something with the Original Webpack Configuration

  return sourceWebpack // return the Modified Webpack Configuration
}

Advanced Configuration

A . Additional options may be define and use since no validation is imposed on the Builder's options:

angular.json:

  ..
  "architect": {
    "build": {
      "builder": "mutable-webpack-angular-builder:browser",
      "options": {
        "mutatorFile": "webpack.config.mutator.js",
        "option1": "..",
        "optionN": "..",
    ..

B . Mutator function additionally receive an object with the fields been used to call the Angular Ng Webpack's creator:

 (webpack: WebpackOptions, parameters: {root: string, projectRoot: string, host, options: {}}) => WebpackOptions

Then, the Mutator function can be:

(sourceWebpack, parameters) => {

  // do something with the Original Webpack Configuration

  // use the project root path: parameters.projectRoot
  // use an Additional options: parameters.option1

  return sourceWebpack // return the Modified Webpack Configuration
}

Extending/Developing

Developing

Documentation

  • CHANGELOG.md: add information of notable changes for each version here, chronologically ordered [1].

[1] Keep a Changelog

License

MIT License

Remember

  • Use code style verification tools => Encourage Best Practices and Usability.
  • Start testing early => Encourage Reliability and Maintainability.
  • Code Review everything => Encourage Functional suitability, Performance Efficiency and Team work.

Additional words

Don't forget:

  • Love what you do.
  • Learn everyday.
  • Learn yourself.
  • Share your knowledge.
  • Learn from the past, dream on the future, live and enjoy the present to the max!.

At life:

  • Let's act, not complain.
  • Be flexible.

At work:

  • Let's give solutions, not questions.