Skip to content

Instantly share code, notes, and snippets.

@robertknight
Last active July 8, 2022 01:32
Show Gist options
  • Star 63 You must be signed in to star a gist
  • Fork 10 You must be signed in to fork a gist
  • Save robertknight/058a194f45e77ff95fcd to your computer and use it in GitHub Desktop.
Save robertknight/058a194f45e77ff95fcd to your computer and use it in GitHub Desktop.
Minimal Webpack DllPlugin example
var square = require('./vendor');
console.log(square(7));
var webpack = require('webpack');
module.exports = {
entry: {
app: ['./app'],
},
output: {
filename: 'app.bundle.js',
path: 'build/',
},
plugins: [new webpack.DllReferencePlugin({
context: '.',
manifest: require('./build/vendor-manifest.json'),
})]
};

Compile with:

webpack --config vendor.webpack.config.js
webpack --config app.webpack.config.js

Use with the following index.html

<script src="build/vendor.bundle.js"></script>
<script src="build/app.bundle.js"></script>
function square(n) {
return n*n;
}
module.exports = square;
var webpack = require('webpack');
module.exports = {
entry: {
vendor: ['./vendor'],
},
output: {
filename: 'vendor.bundle.js',
path: 'build/',
library: 'vendor_lib',
},
plugins: [new webpack.DllPlugin({
name: 'vendor_lib',
path: 'build/vendor-manifest.json',
})]
};
@dphoebus
Copy link

dphoebus commented Oct 7, 2016

@phamminh91,

This would be a build step that happens before you fire up the webpack-dev-server. Since you would only typically build a DLL of something that wouldn't change a bunch (like a vendors bundle) you could create a gulp/grunt task (if you use such tools) that builds the DLL's separately and outputs them somewhere in your main projects source directories.....

For example:

-- src/
    |-- app/
    |-- assets/
    |-- lib/                              <---- ** DLL bundles output here
         |-- vendors.bundle.js            <---- ** vendor DLL bundle
         |-- vendors-manifest.json        <---- ** vendor DLL bundle manifest
    |-- webpack.config.js
    |-- webpack.vendor.dll.config

... then reference the DLL's in your main webpack.config.js file with the DLLReference plugin. Fire up your webpack-dev-server task and all is the same... except for the faster build speeds due to the fact that the dev server no longer has to compile your vendors bundle!

@jrutter
Copy link

jrutter commented Nov 17, 2016

Thanks for writing this up - this is the clearest tutorial I have found on this topic.

Can you use DLL in production too or is it just for development?

@nitelite
Copy link

You can make this work with webpack-dev-server and html-webpack-plugin by telling it to add the dll before the bundle. I used this plugin to fix the issue I was having: https://github.com/SimenB/add-asset-html-webpack-plugin. They even include a small DLL include example.

@snarun
Copy link

snarun commented Feb 2, 2017

Can the DLL be used in production ? or is it just for improving the build time?

@merksam
Copy link

merksam commented Feb 23, 2017

Have the same question as @arunsn43 .
For example:

  1. I made DLL's
  2. Created build
  3. Installed new version of library (means I have update in node_modules)
  4. Created build
    Following the logic - because of I already have library in DLL's bundle, new version of library will never be used.
    Please, fix me, if I don't understand something. Thank you so much!

@Nargonath
Copy link

@arunsn43 I think the purpose of the DllPlugin is only to speed up the build process performance. What it allows to achieve is that you won't have to build your bundles referenced by the DLL if they didn't change. When you build for production, you only build once and then you push the result to the production server. I read that you can also use the DllPlugin for code splitting as well as you would with CommonsChunkPlugin. I'm not a webpack pro, that's just my 2 cents. :)

@amilajack
Copy link

Would be nice if a new version of this could be created for webpack 2 :)

@Eoksni
Copy link

Eoksni commented Apr 10, 2017

@amilajack This does work with webpack 2 after modifying paths to be absolute instead of relative. I created a fork for that https://gist.github.com/Eoksni/83d1f1559e0ec00d0e89c33a6d763049

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment