123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- const helpers = require('./helpers')
- const path = require('path')
- const HtmlWebpackPlugin = require('html-webpack-plugin')
- const TerserPlugin = require('terser-webpack-plugin')
- const ProvidePlugin = require('webpack/lib/ProvidePlugin')
- const MiniCssExtractPlugin = require('mini-css-extract-plugin')
- module.exports = function () {
- const configuration = {
- entry: {
- 'video-embed': './src/standalone/videos/embed.ts',
- 'player': './src/standalone/embed-player-api/player.ts',
- 'test-embed': './src/standalone/videos/test-embed.ts'
- },
- resolve: {
- /*
- * An array of extensions that should be used to resolve modules.
- *
- * See: http://webpack.github.io/docs/configuration.html#resolve-extensions
- */
- extensions: [ '.ts', '.js', '.json', '.scss' ],
- modules: [ helpers.root('src'), 'node_modules' ],
- symlinks: true,
- alias: {
- 'video.js$': path.resolve('node_modules/video.js/core.js'),
- 'hls.js$': path.resolve('node_modules/hls.js/dist/hls.light.js'),
- '@root-helpers': path.resolve('src/root-helpers')
- },
- fallback: {
- fs: [ path.resolve('src/shims/noop.ts') ],
- path: [ path.resolve('src/shims/path.ts') ],
- crypto: [ path.resolve('src/shims/noop.ts') ]
- }
- },
- output: {
- path: helpers.root('dist/standalone/videos'),
- filename: process.env.ANALYZE_BUNDLE === 'true'
- ? '[name].bundle.js'
- : '[name].[contenthash].bundle.js',
- sourceMapFilename: '[file].map',
- chunkFilename: process.env.ANALYZE_BUNDLE === 'true'
- ? '[name].chunk.js'
- : '[id].[contenthash].chunk.js',
- publicPath: '/client/standalone/videos/'
- },
- devtool: process.env.NODE_ENV === 'production' ? false : 'source-map',
- module: {
- rules: [
- {
- test: /\.ts$/,
- use: [
- getBabelLoader(),
- {
- loader: 'ts-loader',
- options: {
- configFile: helpers.root('src/standalone/videos/tsconfig.json')
- }
- }
- ]
- },
- {
- test: /\.m?js$/,
- use: [ getBabelLoader() ]
- },
- {
- test: /\.(sass|scss)$/,
- use: [
- MiniCssExtractPlugin.loader,
- {
- loader: 'css-loader',
- options: {
- sourceMap: true,
- importLoaders: 1
- }
- },
- {
- loader: 'sass-loader',
- options: {
- sassOptions: {
- sourceMap: true,
- includePaths: [
- helpers.root('src/sass/include')
- ]
- }
- }
- }
- ]
- },
- {
- test: /\.html$/,
- exclude: [
- helpers.root('src/index.html'),
- helpers.root('src/standalone/videos/embed.html'),
- helpers.root('src/standalone/videos/test-embed.html')
- ],
- type: 'asset/source'
- },
- {
- test: /\.(jpg|png|gif|svg)$/,
- type: 'asset'
- },
- {
- test: /\.(ttf|eot|woff2?)$/,
- type: 'asset'
- }
- ]
- },
- plugins: [
- new ProvidePlugin({
- process: 'process/browser',
- Buffer: [ 'buffer', 'Buffer' ]
- }),
- new MiniCssExtractPlugin({
- filename: process.env.ANALYZE_BUNDLE === 'true'
- ? '[name].css'
- : '[name].[contenthash].css'
- }),
- new HtmlWebpackPlugin({
- template: 'src/standalone/videos/embed.html',
- filename: 'embed.html',
- title: 'PeerTube',
- chunksSortMode: 'auto',
- inject: 'body',
- chunks: [ 'video-embed' ],
- minify: {
- collapseWhitespace: true,
- removeComments: false,
- removeRedundantAttributes: true,
- removeScriptTypeAttributes: true,
- removeStyleLinkTypeAttributes: true,
- useShortDoctype: true
- }
- }),
- new HtmlWebpackPlugin({
- template: '!!html-loader!src/standalone/videos/test-embed.html',
- filename: 'test-embed.html',
- title: 'PeerTube',
- chunksSortMode: 'auto',
- inject: 'body',
- chunks: [ 'test-embed' ]
- })
- ],
- optimization: {
- minimizer: [
- new TerserPlugin({
- terserOptions: {
- ecma: 6,
- warnings: false,
- ie8: false,
- safari10: false,
- mangle: true,
- compress: {
- passes: 3,
- pure_getters: true
- },
- output: {
- ascii_only: true,
- comments: false
- }
- }
- })
- ]
- },
- performance: {
- maxEntrypointSize: 700000, // 600kB
- maxAssetSize: 700000
- },
- node: {
- global: true
- }
- }
- return configuration
- }
- function getBabelLoader () {
- return {
- loader: 'babel-loader',
- options: {
- presets: [
- [
- '@babel/preset-env', {
- targets: 'last 1 Chrome version, last 2 Edge major versions, Firefox ESR, Safari >= 12, ios_saf >= 12'
- }
- ]
- ]
- }
- }
- }
|