assets-webpack-plugin
Webpack plugin that emits a json file with assets paths.
Table of Contents
Why Is This Useful?
When working with Webpack you might want to generate your bundles with a generated hash in them (for cache busting).
This plug-in outputs a json file with the paths of the generated assets so you can find them from somewhere else.
Example output:
The output is a JSON object in the form:
Where:
"bundle_name"
is the name of the bundle (the key of the entry object in your webpack config, or "main" if your entry is an array)."asset_kind"
is the camel-cased file extension of the asset
For example, given the following webpack config:
entry: one: 'src/one.js' two: 'src/two.js' output: path: path publicPath: "/js/" filename: '[name]_[hash].bundle.js'
The plugin will output the following json file:
Install
npm install assets-webpack-plugin --save-dev
Configuration
In your webpack config include the plug-in. And add it to your config:
var path = var AssetsPlugin = var assetsPluginInstance = moduleexports = // ... output: path: path filename: "[name]-bundle-[hash].js" publicPath: "/js/" // .... plugins: assetsPluginInstance
Options
You can pass the following options:
filename
Optional. webpack-assets.json
by default.
Name for the created json file.
filename: 'assets.json'
fullPath
Optional. true
by default.
If false
the output will not include the full path
of the generated file.
fullPath: false
e.g.
/public/path/bundle.js
vs bundle.js vs
includeManifest
Optional. false
by default.
Inserts the manifest javascript as a text
property in your assets.
Accepts the name of your manifest chunk. A manifest is the last CommonChunk that
only contains the webpack bootstrap code. This is useful for production
use when you want to inline the manifest in your HTML skeleton for long-term caching.
See issue #1315
or a blog post
to learn more.
includeManifest: 'manifest'// assets.json:// {entries: {manifest: {js: `hashed_manifest.js`, text: 'function(modules)...'}}}//// Your html template:// <script>// {assets.entries.manifest.text}// </script>
path
Optional. Defaults to the current directory.
Path where to save the created JSON file.
path: path
prettyPrint
Optional. false
by default.
Whether to format the JSON output for readability.
prettyPrint: true
processOutput
Optional. Defaults is JSON stringify function.
Formats the assets output.
{ return 'window.staticMap = ' + JSON }
update
Optional. false
by default.
When set to true
, the output JSON file will be updated instead of overwritten.
update: true
metadata
Inject metadata into the output file. All values will be injected into the key "metadata".
metadata: version: 123// Manifest will now contain:// {// metadata: {version: 123}// }
Using in multi-compiler mode
If you use webpack multi-compiler mode and want your assets written to a single file, you must use the same instance of the plugin in the different configurations.
For example:
var webpack = var AssetsPlugin = var assetsPluginInstance =
Using this with Rails
You can use this with Rails to find the bundled Webpack assets via Sprockets.
In ApplicationController
you might have:
path = Rails.root.join('app', 'views', 'webpack-assets.json') # This is the file generated by the plug-in file = File.read(path) json = JSON.parse(file) json[bundle]['js']end
Then in the actions:
@script = script_for('clients') # this will retrieve the bundle named 'clients' end
And finally in the views:
Test
npm test