Install locally using npm:
npm i wrapper-webpack-plugin
BGO Fix: Only works with Webpack >=5
Version 2 of this plugin only works with webpack >=4.
For webpack <4 use version 1 of the plugin with npm i -D wrapper-webpack-plugin@1
The WrapperPlugin class has a single parameter, an object with a header and/or footer properties. Header text will
be prepended to the output file, footer text will be appended. These can be either a string or a function. A string
will simply be a appended/prepended to the file output. A function is expected to return a string, and will receive the
name of the output file as an argument.
An optional test property (a string or a RegExp object) can control which output files are affected; otherwise all output files will be wrapped.
New in 2.1:
The optional afterOptimization property can be used to avoid having the added text affected by the optimization stage, e.g. if you don't want it to be minified.
function WrapperPlugin({
test: string | RegExp,
header: string | function,
footer: string | function,
afterOptimization: bool // default: false
})
Wraps bundle files with '.js' extension in a self invoking function and enables strict mode:
constWrapperPlugin=require('wrapper-webpack-plugin');module.exports={// other webpack config hereplugins: [// strict mode for the whole bundlenewWrapperPlugin({test: /\.js$/,// only wrap output of bundle files with '.js' extensionheader: '(function () { "use strict";\n',footer: '\n})();'})]};Prepends bundles with a doc comment:
constWrapperPlugin=require('wrapper-webpack-plugin');module.exports={// other webpack config hereplugins: [newWrapperPlugin({header: function(fileName){return'/*! file: '+fileName+', created by dev123 */\n';}})]};Accessing file name, build hash, and chunk hash at runtime.
constWrapperPlugin=require('wrapper-webpack-plugin');module.exports={// other webpack config hereoutput: {filename: '[name].[chunkhash].js'},plugins: [newWrapperPlugin({header: `(function (FILE_NAME, BUILD_HASH, CHUNK_HASH) {`,footer(fileName,args){return`})('${fileName}', '${args.hash}', '${args.chunkhash}');`;// note: args.hash and args.chunkhash correspond to the [hash] and [chunkhash]// placeholders you can specify in the output.filename option.}})]};Keeping header in a separate file:
file: header.js
/*! * my awesome app! */file: webpack.config
constfs=require('fs');WrapperPlugin=require('wrapper-webpack-plugin');constheaderDoc=fs.readFileSync('./header.js','utf8');module.exports={// other webpack config hereplugins: [newWrapperPlugin({header: headerDoc})]};A slightly more complex example using lodash templates:
constWrapperPlugin=require('wrapper-webpack-plugin');consttemplate=require('lodash.template');constpkg=require('./package.json');consttpl='/*! <%= name %> v<%= version %> | <%= author %> */\n';module.exports={// other webpack config hereplugins: [newWrapperPlugin({header: template(tpl)(pkg)})]};This plugin should play nicely with most other plugins.
E.g. adding the webpack.optimize.UglifyJsPlugin plugin to the plugins array after the WrapperPlugin will result in
the wrapper text also being minified.