Step 10.3: Use module replacement to achieve component overrides

This is the same system as the customisations override, however deliberately using a different JSON file to avoid conflicts. 

Forks would be expected to use the customisations file, not the components file, to override/add components.
This commit is contained in:
Travis Ralston 2022-03-24 23:41:19 -06:00
parent 5459c1eb96
commit 5b592eca4f
5 changed files with 27 additions and 18 deletions

View file

@ -50,14 +50,24 @@ try {
} catch (e) {
// ignore - not important
}
const moduleReplacementPlugins = Object.entries(fileOverrides).map(([oldPath, newPath]) => {
return new webpack.NormalModuleReplacementPlugin(
// because the input is effectively defined by the person running the build, we don't
// need to do anything special to protect against regex overrunning, etc.
new RegExp(oldPath.replace(/\//g, '[\\/\\\\]').replace(/\./g, '\\.')),
path.resolve(__dirname, newPath),
);
});
function parseOverridesToReplacements(overrides) {
return Object.entries(overrides).map(([oldPath, newPath]) => {
return new webpack.NormalModuleReplacementPlugin(
// because the input is effectively defined by the person running the build, we don't
// need to do anything special to protect against regex overrunning, etc.
new RegExp(oldPath.replace(/\//g, '[\\/\\\\]').replace(/\./g, '\\.')),
path.resolve(__dirname, newPath),
);
});
}
const moduleReplacementPlugins = [
...parseOverridesToReplacements(require('./components.json')),
// Allow customisations to override the default components too
...parseOverridesToReplacements(fileOverrides),
];
module.exports = (env, argv) => {
// Establish settings based on the environment and args.