webpack.config.js
const childProcess = require('child_process');
const webpack = require('webpack');
const Encore = require('@symfony/webpack-encore');
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin');
const { version } = require('./package.json');
// Manually configure the runtime environment if not already configured yet by the "encore" command.
// It's useful when you use tools that rely on webpack.config.js file.
if (!Encore.isRuntimeEnvironmentConfigured()) {
Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev');
}
Encore
.setOutputPath('dist')
.setPublicPath('/')
.disableSingleRuntimeChunk()
.splitEntryChunks()
.configureSplitChunks(options => {
options.chunks = 'all';
options.name = 'vendor';
})
.addEntry('background', './src/background.ts')
.addEntry('popup/popup', './src/popup/popup.ts')
.addEntry('options/options', './src/options/options.ts')
.addPlugin(new HtmlWebpackPlugin({
chunks: ['popup/popup'],
template: 'src/popup/popup.html',
filename: 'popup/popup.html',
}))
.addPlugin(new HtmlWebpackPlugin({
chunks: ['options/options'],
template: 'src/options/options.html',
filename: 'options/options.html',
}))
.addPlugin(new CopyWebpackPlugin({
patterns: [
{ from: 'src/icons', to: 'icons', globOptions: { ignore: ['icon.xcf'] } },
{
from: 'src/manifest.json',
to: 'manifest.json',
transform(content) {
const contentJson = JSON.parse(content);
contentJson.version = version;
if (Encore.isDev()) {
contentJson['content_security_policy'] = "script-src 'self' 'unsafe-eval'; object-src 'self'";
}
return JSON.stringify(contentJson, null, 2);
},
},
],
}))
.configureManifestPlugin(options => {
options.fileName = 'webpack-manifest.json';
})
/*
* FEATURE CONFIG
*
* Enable & configure other features below. For a full
* list of features, see:
* https://symfony.com/doc/current/frontend.html#adding-more-features
*/
.cleanupOutputBeforeBuild()
.enableSourceMaps(!Encore.isProduction())
.enableSassLoader(options => {
options.implementation = require('sass');
})
.enableVueLoader()
.enableTypeScriptLoader()
;
if (Encore.isProduction()) {
const exec = (command) => childProcess.execSync(command).toString().trim();
const gitRevision = exec('git rev-parse --abbrev-ref HEAD');
const gitBranchOrTag = gitRevision === 'HEAD' ? exec('git describe --tags --abbrev=0') : gitRevision;
Encore.addPlugin(new webpack.BannerPlugin({
entryOnly: true,
test: /\.js/,
banner: `Oh, attention, vous êtes devant du code minimifié !
Ce n'est pas pour cacher du code malveillant, c'est uniquement pour réduire le poids de l'extension.
Fichier original : https://github.com/Kocal/Solary/blob/${gitBranchOrTag}/src/[name].ts`,
}));
}
module.exports = Encore.getWebpackConfig();