UNPKG

generator-ssjs

Version:

yo generator to scaffold an [SSJS Framework](https://adessose.github.io/ssjs-webpack/) project. ## Installation ``` # install yo npm install --global yo

82 lines (74 loc) 2.49 kB
const htmlAsset = require('./htmlAsset'); const packageAsset = require('./packageAsset'); const dynamicPolyfills = require('./dynamicPolyfills'); const { sources, webpack } = require('webpack'); const minify = require('./minify'); class SsjsPlugin { static defaultOptions = { output: "main.js", package: false, html: true, removeRawJS: true, htmlName: "index.html", packageName: "ssjs-package", cloudpageCollectionName: "ssjs-cloudpage-collection", codeResourceName: "ssjs-code-resource", dynamicPolyfills: false, minify: false }; constructor(options = {}) { this.options = { ...SsjsPlugin.defaultOptions, ...options }; } apply(compiler) { const pluginName = SsjsPlugin.name; this.options.isLandingPage = false; compiler.hooks.compilation.tap(pluginName, (compilation) => { compilation.hooks.buildModule.tap(pluginName, (module) => { if (module.resource) { this.options.isLandingPage |= /\.html$/.test(module.resource); } }); compilation.hooks.processAssets.tap( { name: pluginName, stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE, }, (assets) => { for (const asset in assets) { let js = compilation.assets[asset].source(); if (this.options.dynamicPolyfills) { console.warn("\nWARNING:\nDynamic Polyfills is an experimental feature. Check the documentation for further information.\n\n") js = dynamicPolyfills(js); } if (this.options.minify && this.options.minify != 'false') { js = minify(js); } compilation.updateAsset( asset, new sources.RawSource(js) ); if (this.options.html && this.options.html != 'false') { compilation.emitAsset( this.options.htmlName, new sources.RawSource(htmlAsset(js)) ) } if (this.options.package) { compilation.emitAsset( `${this.options.packageName}.json`, new sources.RawSource(packageAsset(js, this.options)) ) } if (this.options.removeRawJS && this.options.removeRawJS != 'false') { compilation.deleteAsset(asset); } } } ); }); } } module.exports = SsjsPlugin;