webpack
DllPlugin och DllReferencePlugin
Sök…
Introduktion
Dll- och DllReference-pluginsna tillåter koden att delas upp i flera buntar på ett sätt som buntarna kan sammanställas oberoende av varandra.
Det är möjligt att bygga "leverantör" -skript i ett bibliotek som inte behöver sammanställas ofta (ex: React, jQuery, Bootstrap, Fontawesome ...) och referera till det i din appbunt som behöver dessa skript.
Applikationspaketet, det som ständigt kommer att ändras, kommer att vara i en separat konfiguration som bara refererar till ett redan byggt "leverantör" -paket.
Syntax
- ny webpack.DllPlugin ({path: '[name] -manifest.json', namn: '[name] _ [hash]'})
- ny webpack.DllReferencePlugin ({context: __dirname, manifest: required ('./ packname-manifest.json')})
Leverantörskonfiguration (DllPlugin)
Obs: output.library
och name
(i DllPlugin) måste vara desamma.
const path = require('path');
const webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const extractCSS = new ExtractTextPlugin('vendor.css');
const isDevelopment = process.env.NODE_ENV !== 'production';
module.exports = {
resolve: {
extensions: ['.js'],
},
module: {
rules: [
{ test: /\.(png|woff|woff2|eot|ttf|svg)$/, loader: 'url-loader?limit=100000' },
{ test: /\.s?css$/i, loader: extractCSS.extract(['css-loader?minimize', 'sass-loader']) },
{ test: /\.json$/, loader: 'json-loader' },
],
},
entry: {
vendor: [
'babel-polyfill',
'font-awesome/scss/font-awesome.scss',
'bootstrap/scss/bootstrap.scss',
'jquery',
'history',
'react',
'react-dom',
'redux',
'react-redux',
'react-router',
'react-router-dom',
'react-router-redux',
'redux-thunk',
],
},
output: {
path: path.resolve('./dist'),
filename: '[name].js',
library: '[name]_[hash]',
},
plugins: [
extractCSS,
new webpack.DllPlugin({
path: path.join(__dirname, 'dist', '[name]-manifest.json'),
name: '[name]_[hash]',
})
].concat(isDevelopment ? [] : [
new webpack.optimize.UglifyJsPlugin({
beautify: false,
comments: false,
}),
]),
};
Referera ett Dll-paket (DllReferencePlugin)
Anmärkning: manifest
(i DllReferencePlugin) bör referera path
(definierad i DllPlugin)
const webpack = require('webpack');
const path = require('path');
const isDevelopment = process.env.NODE_ENV !== 'production';
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const extractCSS = new ExtractTextPlugin('app.css');
const merge = require('extendify')({ isDeep: true, arrays: 'concat' });
module.exports = merge({
context: __dirname,
entry: {
app: (isDevelopment ? ['webpack-hot-middleware/client'] : []).concat(['./src/']),
},
output: {
path: path.resolve('./dist'),
publicPath: '/static',
filename: '[name].js',
},
resolve: {
extensions: ['.js', '.ts', '.tsx'],
},
module: {
loaders: [
{
test: /\.tsx?$/,
loader: 'babel-loader!awesome-typescript-loader?forkChecker=true',
include: /src|spec/,
},
{
test: /\.s?css$/,
loader: extractCSS.extract(['css-loader?minimize', 'sass-loader']),
include: /src/,
},
],
},
plugins: [
new webpack.DllReferencePlugin({
context: __dirname,
manifest: require('./dist/vendor-manifest.json'),
}),
new webpack.DefinePlugin({
'process.env': {
'ENV': JSON.stringify(process.env.NODE_ENV),
},
}),
extractCSS,
],
}, isDevelopment ? require('./webpack.config.development') : require('./webpack.config.production'));
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow