NAME
Mojo::Alien::webpack - Runs the external nodejs program webpack
SYNOPSIS
use Mojo::Alien::webpack;
my $webpack = Mojo::Alien::webpack->new;
# Run once
$webpack->build;
# Build when webpack see files change
$webpack->watch;
DESCRIPTION
Mojo::Alien::webpack is a class for runnig the external nodejs program webpack.
ATTRIBUTES
assets_dir
$path = $webpack->assets_dir;
$webpack = $webpack->assets_dir($webpack->config->dirname->child('assets'))
Location to source assetsa and partial webpack.config.js files.
binary
$array_ref = $webpack->binary;
$webpack = $webpack->binary('webpack');
The path to the webpack executable. Defaults to MOJO_WEBPACK_BINARY
environment variable, or "webpack" inside "./node_modules". Fallback to just "webpack".
config
$path = $webpack->config;
$webpack = $webpack->config(path->to_abs->child('webpack.config.js'));
Holds an /absolute path to webpack.config.js.
dependencies
$hash_ref = $webpack->dependencies;
A hash where the keys can match the items in "include" and the values are lists of packages to install. Keys that does /not match items in "include" will be ignored. This attribute will be used by "init".
These dependencies are predefined:
core | webpack webpack-cli
css | css-loader mini-css-extract-plugin css-minimizer-webpack-plugin
eslint | eslint-webpack-plugin
js | @babel/core @babel/preset-env @babel/plugin-transform-runtime babel-loader terser-webpack-plugin
sass | css-loader mini-css-extract-plugin css-minimizer-webpack-plugin sass sass-loader
vue | vue vue-loader vue-template-compiler
include
$array_ref = $webpack->include;
$webpack = $webpack->include([qw(js css)]);
"include" can be used to install dependencies and load other webpack config files. The config files included must exist in the "webpack.config.d" sub directory inside "assets_dir". Here is an example of which files that will be included if they exists:
# Including "js" and "css" will look for the files below
$webpack->include[qw(js css)]);
# - assets/webpack.config.d/package-babel-loader.js
# - assets/webpack.config.d/package-terser-webpack-plugin.js
# - assets/webpack.config.d/package-css-loader.js
# - assets/webpack.config.d/package-css-minimizer-webpack-plugin.js
# - assets/webpack.config.d/js.js
# - assets/webpack.config.d/css.js
The "include" feature is currently EXPERIMENTAL.
mode
$str = $webpack->mode;
$webpack = $webpack->mode('development');
Should be either "development" or "production". Will be used as "NODE_ENV" environment variable when calling "build" or "watch".
npm
$npm = $webpack->npm;
A Mojo::Alien::npm object used by "init".
out_dir
$path = $webpack->out_dir;
$webpack = $webpack->out_dir(path('dist')->to_abs);
Location to write output assets to.
METHODS
asset_map
$hash_ref = $webpack->asset_map;
Parses the filenames in "out_dir" and returns a hash ref with information about the generated assets. Example return value:
{
'relative/output.development.js' => { # Key is relative path to out_dir()
ext => 'css', # File extension
mode => 'development', # or "production"
mtime => 1616976114, # File modification epoch timestamp
name => 'relative/output.js', # Name of asset, without checksum or mode
path => '/path/to/entry-name.development.js', # Absolute path to asset
},
}
Note that this method is currently EXPERIMENTAL.
build
$webpack->build;
Will build the assets or croaks on errors. Automatically calls "init".
exec
$webpack->exec;
This method will replace the current process, instead of starting webpack inside a fork. This method is called by "watch" inside a fork.
init
$webpack = $webpack->init;
Will install "webpack" and "webpack-cli" and create a default "config". Does nothing if this is already done.
This method is automatically called by "build" and "watch".
pid
$int = $webpack->pid;
Returns the PID of the webpack process started by "start".
stop
$webpack->stop;
Will stop the process started by "watch". Does nothing if "watch" has not been called.
watch
$webpack->watch;
Forks a new process that runs "webpack watch". This means that any changes will generate new assets. This is much more efficient than calling "build" over and over again. Automatically calls "init".