Switch assets manifest plugin
This commit is contained in:
@@ -1,19 +0,0 @@
|
||||
|
||||
const path = require('path');
|
||||
|
||||
/**
|
||||
* Process AssetsPlugin output and format it
|
||||
* for Sage: {"[name].[ext]":"[name]_[hash].[ext]"}
|
||||
* @param {Object} assets passed by processOutput
|
||||
* @return {String} JSON
|
||||
*/
|
||||
module.exports = (assets) => {
|
||||
const manifest = {};
|
||||
Object.keys(assets).forEach((name) => {
|
||||
Object.keys(assets[name]).forEach((ext) => {
|
||||
const filename = `${path.dirname(assets[name][ext])}/${path.basename(`${name}.${ext}`)}`;
|
||||
manifest[filename] = assets[name][ext];
|
||||
});
|
||||
});
|
||||
return manifest;
|
||||
};
|
||||
@@ -1,18 +1,50 @@
|
||||
const AssetsPlugin = require('assets-webpack-plugin');
|
||||
'use strict'; // eslint-disable-line
|
||||
|
||||
const WebpackAssetsManifest = require('webpack-assets-manifest');
|
||||
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
|
||||
const cssnano = require('cssnano');
|
||||
const path = require('path');
|
||||
|
||||
const processOutput = require('./util/assetsPluginProcessOutput');
|
||||
const config = require('./config');
|
||||
|
||||
module.exports = {
|
||||
plugins: [
|
||||
new AssetsPlugin({
|
||||
path: config.paths.dist,
|
||||
filename: 'assets.json',
|
||||
fullPath: false,
|
||||
processOutput(assets) {
|
||||
return JSON.stringify(Object.assign(processOutput(assets), config.manifest));
|
||||
new WebpackAssetsManifest({
|
||||
output: 'assets.json',
|
||||
space: 2,
|
||||
writeToDisk: false,
|
||||
assets: config.manifest,
|
||||
replacer(key, value) {
|
||||
if (typeof value === 'string') {
|
||||
return value;
|
||||
}
|
||||
const manifest = value;
|
||||
/**
|
||||
* Hack to prepend scripts/ or styles/ to manifest keys
|
||||
*
|
||||
* This might need to be reworked at some point.
|
||||
*
|
||||
* Before:
|
||||
* {
|
||||
* "main.js": "scripts/main_abcdef.js"
|
||||
* "main.css": "styles/main_abcdef.css"
|
||||
* }
|
||||
* After:
|
||||
* {
|
||||
* "scripts/main.js": "scripts/main_abcdef.js"
|
||||
* "styles/main.css": "styles/main_abcdef.css"
|
||||
* }
|
||||
*/
|
||||
Object.keys(manifest).forEach((src) => {
|
||||
const sourcePath = path.basename(path.dirname(src));
|
||||
const targetPath = path.basename(path.dirname(manifest[src]));
|
||||
if (sourcePath === targetPath) {
|
||||
return;
|
||||
}
|
||||
manifest[`${targetPath}/${src}`] = manifest[src];
|
||||
delete manifest[src];
|
||||
});
|
||||
return manifest;
|
||||
},
|
||||
}),
|
||||
new OptimizeCssAssetsPlugin({
|
||||
|
||||
Reference in New Issue
Block a user