Telegram Web K with changes to work inside I2P
https://web.telegram.i2p/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.9 KiB
95 lines
2.9 KiB
process.env.NODE_ENV = 'production'; |
|
|
|
const path = require('path'); |
|
const merge = require('webpack-merge'); |
|
const common = require('./webpack.common.js'); |
|
|
|
const CompressionPlugin = require("compression-webpack-plugin"); |
|
const WebpackOnBuildPlugin = require('on-build-webpack'); |
|
const TerserJSPlugin = require('terser-webpack-plugin'); |
|
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); |
|
const fs = require('fs'); |
|
|
|
const buildDir = __dirname + '/public/'; |
|
|
|
module.exports = merge(common, { |
|
mode: 'production', |
|
|
|
optimization: { |
|
//minimizer: [new TerserJSPlugin({}), new OptimizeCSSAssetsPlugin({})], |
|
//runtimeChunk: 'single', |
|
splitChunks: { |
|
chunks: 'all', |
|
maxInitialRequests: Infinity, |
|
//minSize: 0, |
|
cacheGroups: { |
|
vendor: { |
|
test: /[\\/]node_modules[\\/]/, |
|
name(module) { |
|
// get the name. E.g. node_modules/packageName/not/this/part.js |
|
// or node_modules/packageName |
|
const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]; |
|
|
|
// npm package names are URL-safe, but some servers don't like @ symbols |
|
return `npm.${packageName.replace('@', '')}`; |
|
}, |
|
}, |
|
}, |
|
} |
|
}, |
|
|
|
plugins: [ |
|
new CompressionPlugin({ |
|
filename: '[path].gz[query]', |
|
algorithm: 'gzip', |
|
test: /\.(js|css|html|svg)$/, |
|
threshold: 10240, |
|
minRatio: 0.8, |
|
}), |
|
/* new CompressionPlugin({ |
|
filename: '[path].br[query]', |
|
algorithm: 'brotliCompress', |
|
test: /\.(js|css|html|svg)$/, |
|
compressionOptions: { level: 11 }, |
|
threshold: 10240, |
|
minRatio: 0.8, |
|
deleteOriginalAssets: false, |
|
}), */ |
|
|
|
new WebpackOnBuildPlugin(function(stats) { |
|
const newlyCreatedAssets = stats.compilation.assets; |
|
|
|
const unlinked = []; |
|
fs.readdir(path.resolve(buildDir), (err, files) => { |
|
files.forEach(file => { |
|
//console.log('to unlink 1:', file); |
|
|
|
if(file.includes('mitm.') |
|
|| file.includes('sw.js') |
|
|| file.includes('.xml') |
|
|| file.includes('.webmanifest') |
|
|| file.includes('.wasm') |
|
|| file.includes('rlottie') |
|
|| file.includes('pako') |
|
|| file.includes('Worker.min.js') |
|
|| file.includes('recorder.min.js') |
|
|| file.includes('.hbs') |
|
|| file.includes('mp4box')) return; |
|
|
|
let p = path.resolve(buildDir + file); |
|
if(!newlyCreatedAssets[file] && ['.gz', '.js'].find(ext => file.endsWith(ext)) !== undefined) { |
|
|
|
//console.log('to unlink 2:', file); |
|
|
|
fs.unlinkSync(p); |
|
unlinked.push(file); |
|
} |
|
}); |
|
|
|
if(unlinked.length > 0) { |
|
console.log('Removed old assets: ', unlinked); |
|
} |
|
}); |
|
}) |
|
] |
|
});
|
|
|