Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
mutable-webpack-angular-builder
Advanced tools
Allows to mutate the webpack configuration before is being used by @angular-devkit/build-angular:browser
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.
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
}
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.
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
}
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
}
CHANGELOG.md
: add information of notable changes for each version here, chronologically ordered [1].[1] Keep a Changelog
Don't forget:
At life:
At work:
FAQs
Allows to mutate the webpack configuration before is being used by @angular-devkit/build-angular:browser
We found that mutable-webpack-angular-builder demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.