UNPKG

piral-cli-webpack5

Version:

Provides debug and build capabilities for pilets and Piral instances using Webpack v5.

45 lines (37 loc) 1.51 kB
import * as HtmlWebpackPlugin from 'html-webpack-plugin'; import type { Configuration } from 'webpack'; import { load } from 'cheerio'; import { readFileSync } from 'fs'; import { join, dirname } from 'path'; import { getTemplates, extractParts, setEntries } from './helpers'; export interface Html5EntryWebpackPluginOptions extends Omit<HtmlWebpackPlugin.Options, 'templateContent'> {} export const html5EntryWebpackConfigEnhancer = (options: Html5EntryWebpackPluginOptions) => (compilerOptions: Configuration) => { const entry = compilerOptions.entry; const [template] = getTemplates(entry); if (template) { const src = dirname(template); const html = readFileSync(template, 'utf8'); const templateContent = load( // try to replace ejs tags, if any html.replace(/<%=([\w\W]*?)%>/g, function (match, group) { try { return eval(group); } catch { return match; } }), ); const entries = extractParts(templateContent).map((entry) => join(src, entry)); const plugins = [ new HtmlWebpackPlugin({ ...options, templateContent: templateContent.html(), }), ]; if (!entries.length) throw new Error('Template entries expected to be not empty'); setEntries(compilerOptions, template, entries as [string, ...Array<string>]); compilerOptions.plugins = [...compilerOptions.plugins, ...plugins]; } return compilerOptions; };