1.0.1 • Published 3 years ago

@gravityforms/webpack-config v1.0.1

Weekly downloads
-
License
GPL-2.0-or-later
Repository
github
Last release
3 years ago

Gravity Forms Webpack Config

Webpack configurations and custom babel configuration for Gravity Forms JavaScript development.

Installation

Install the module

npm install @gravityforms/webpack-config --save-dev

Note: This package requires node 14.15.0 or later, and npm 6.14.8 or later.

Overview

This configuration is tailored for use on Gravity Forms projects, but may be useful to others. It abstracts away the complex Webpack configuration we use, so it can be utilized by our add on repos along with the core plugin as needed from one managed package.

It is opinionated in one main way: A single admin and single theme bundle is output, to match the contexts which WordPress presents. Code splitting is used to keep the core enqueue for each context minimal.

Usage

This config provides 4 main npm scripts to run:

"js:theme:dev": "cross-env NODE_ENV=themedev BROWSERSLIST_ENV=theme npx webpack",
"js:admin:dev": "cross-env NODE_ENV=admindev BROWSERSLIST_ENV=admin npx webpack",
"js:theme:prod": "cross-env NODE_ENV=themeprod BROWSERSLIST_ENV=theme npx webpack",
"js:admin:prod": "cross-env NODE_ENV=adminprod BROWSERSLIST_ENV=admin npx webpack"

Each one produces the admin and theme dev and prod bundles respectively. ev bundles use eval-source-map for quality browser source mapping for modules, so don't be concerned by their output size, it's due to that.

To call these scripts from your project, place this in your package json in the scripts object:

"js:theme:dev": "cd node_modules/@gravityforms/webpack-config && npm run js:theme:dev",

Map each of the four tasks that way. Changing directories into the package directory is needed for now.

Output files default to being output in assets/js/dist as scripts-admin.js, vendor-admin.js, scripts-theme.js and vendor-theme.js with .min equivalents for the production variants. Vendor files contain all imported node_modules sourced third party libraries.

To customize your output and the webpack configuration, place a gravityform.config.js file in your project root. The webpack config can be modified like so:

const { resolve } = require( 'path' );

module.exports = {
	webpackConfig: {
		alias: {
			common: resolve( __dirname, 'assets/js/src/common'),
		},
		paths: {
			src: resolve( __dirname, 'assets/js/src/'),
			dist: resolve( __dirname, 'assets/js/dist/'),
			reports: resolve( __dirname, 'reports/webpack-%s.html' ),
		},
		overrides: {
			externals: {
				admin: {
					'gform-admin-config': 'gform_admin_config',
					'gform-admin-i18n': 'gform_admin_i18n',
				},
				theme: {
					'gform-theme-config': 'gform_theme_config',
					'gform-theme-i18n': 'gform_theme_i18n',
				},
			},
			output: {
				uniqueName: 'gravityforms',
			},
		},
	}
}

The alias section allows you to pass custom short paths to the babel module resolver plugin so webpack uses them for module resolution. paths allows you to change source and output directories. overrides allows for tweaking of the actual webpack config internals, and will be extended much more shortly.