@jenssimon/webpack-config-sfcc
Version:
A shareable Webpack configuration for SFCC projects
211 lines (210 loc) • 5.22 kB
TypeScript
import type { Compiler, WebpackPluginInstance, RuleSetRule, EntryObject, WebpackOptionsNormalized } from 'webpack';
import type { AcceptedPlugin } from 'postcss';
/**
* Configuration for cartridge aliases.
*/
export interface CartridgeAliasConfig {
/**
* The name of the alias.
* This is the alias you will use in code.
*/
alias: string;
/**
* The name of the SFCC cartridge to alias.
*/
cartridge: string;
/**
* Don't add an `-css` alias for this cartridge. Only JS.
*/
noStyle?: boolean;
}
/**
* Configuration options for the Webpack configuration.
*/
export interface SFCCWebpackConfigOptions {
/**
* The `__dirname` value of the outside `webpack.config.js` file.
*
* Required
*
* Used to resolve paths from the package that consumes the generated Webpack configuration.
* Just add
*
* ```
* {
* dirname: __dirname,
* // ...
* }
* ```
*/
dirname: string;
/**
* The `require.resolve` function of the package that consumes the generated Webpack configuration.
* Used to resolve modules.
*
* Required
*
* Just add
*
* ```
* {
* resolver: require.resolve,
* // ...
* }
* ```
*/
resolver: NodeJS.RequireResolve;
/**
* The entrypoint of the application.
*
* Default: `index.js`
*/
entryPoint?: string;
/**
* The name of the JS entrypoint.
*
* Default: `app`
*/
entryName?: string;
/**
* The name of the CSS entrypoint.
*
* Default: `app`
*/
cssEntryName?: string;
/**
* The path prefix for the generated bundles.
*
* Default: `undefined`
*
* This is used to bundle files to another subfolder during the production build (e.g. `dist/`)..
*/
pathPrefix?: string;
/**
* Generate source maps for `.js` and `.css` files.
*
* Default: `false`
*/
sourceMap: boolean;
/**
* Build Webpack config for usage with dev server.
*
* Default: `false`
*/
devServer: boolean;
env?: Record<string, string | boolean>;
site?: string;
locale?: string;
hostname?: string;
publicPath?: string;
hmrPath?: string;
/**
* Use production mode.
*
* Default: `false`
*/
production: boolean;
/**
* Loaders executed before `mini-css-extract-plugin` loader.
*
* Default: `[]`
*/
preCSSExtractLoaders: string[];
additionalPlugins: ((this: Compiler, compiler: Compiler) => void) | WebpackPluginInstance[];
/**
* Additional entry point configurations.
*/
additionalEntries?: EntryObject;
additionalPostCSSPlugins: AcceptedPlugin[];
additionalDefine: Record<string, unknown>;
/**
* Disable linting.
* Useful when linting was already done before Webpack build.
*
* Default: `false`
*/
noLint: boolean;
onlyCartridge?: string;
/**
* Additional Webpack rules (see https://webpack.js.org/configuration/module/#modulerules) used for your cartridge.
*
* Default: `[]`
*/
projectSpecificRules: RuleSetRule[];
/**
* Aliases
*
* Default: `{}`
*/
alias: {
/**
* New request.
*/
alias: string | false | string[];
/**
* Request to be redirected.
*/
name: string;
/**
* Redirect only exact matching request.
*/
onlyModule?: boolean;
}[] | Record<string, string | false | string[]>;
/**
* Cartridges that needs an alias configuration.
*
* Example:
*
* ```
* aliasCartridges: [
* { alias: 'foo', cartridge: 'app_foo' },
* ],
* ```
*
* This configuration creates the aliases `foo` (for JS) and `foo-css` (for CSS/SCSS).
*
* You can skip the generation of the `-css` alias using the `noStyle` flag:
*
* ```
* aliasCartridges: [
* { alias: 'bar', cartridge: 'app_bar', noStyle: true },
* ],
* ```
*
* Aliases for `app_storefront_base` will be created by default.
*/
aliasCartridges?: CartridgeAliasConfig[];
/**
* The target environment for swc (see https://swc.rs/docs/configuring-swc#jsctarget).
*
* Default: `"es2019"`
*/
swcTarget?: string;
/**
* Some packages from `node_modules` need to be transpiled. You can specify a list of packages using this option.
*
* Default: `[]`
*
* Example:
* ```
* transformNodeModules: [
* 'lit',
* 'lit-element',
* 'lit-html',
* ],
* ```
*
*/
transformNodeModules?: string[];
/**
* Allow circular dependencies.
*
* Default: `false`
*/
allowCircularDependendies: boolean;
}
/**
* A function which generates a Webpack config section.
*/
export type ConfigurationFnc<T> = (cartridge: string, options: SFCCWebpackConfigOptions) => T;
export type WebpackConfigurationGenerator = (cartridge: string, options: Partial<SFCCWebpackConfigOptions>) => WebpackOptionsNormalized;