123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- const helpers = require('./helpers')
- const path = require('path')
- const HtmlWebpackPlugin = require('html-webpack-plugin')
- const TerserPlugin = require('terser-webpack-plugin')
- const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin')
- const MiniCssExtractPlugin = require('mini-css-extract-plugin')
- module.exports = function () {
- const configuration = {
- entry: {
- 'video-embed': './src/standalone/videos/embed.ts',
- 'player': './src/standalone/player/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'), helpers.root('node_modules') ],
- alias: {
- 'video.js$': path.resolve('node_modules/video.js/core.js'),
- '@root-helpers': path.resolve('src/root-helpers'),
- '@shared/models': path.resolve('../shared/models'),
- '@shared/core-utils': path.resolve('../shared/core-utils')
- }
- },
- output: {
- path: helpers.root('dist/standalone/videos'),
- filename: process.env.ANALYZE_BUNDLE === 'true'
- ? '[name].bundle.js'
- : '[name].[hash].bundle.js',
- sourceMapFilename: '[file].map',
- chunkFilename: '[id].[hash].chunk.js',
- publicPath: '/client/standalone/videos/'
- },
- devtool: process.env.NODE_ENV === 'production' ? false : 'source-map',
- module: {
- rules: [
- {
- test: /\.ts$/,
- use: [
- {
- loader: 'ts-loader',
- options: {
- configFile: 'tsconfig.base.json'
- }
- }
- ]
- },
- {
- 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$/,
- use: 'raw-loader',
- exclude: [
- helpers.root('src/index.html'),
- helpers.root('src/standalone/videos/embed.html'),
- helpers.root('src/standalone/videos/test-embed.html')
- ]
- },
- {
- test: /\.(jpg|png|gif)$/,
- use: 'url-loader'
- },
- { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: 'url-loader?limit=10000&minetype=application/font-woff' },
- { test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: 'file-loader' }
- ]
- },
- plugins: [
- new MiniCssExtractPlugin({
- filename: process.env.ANALYZE_BUNDLE === 'true'
- ? '[name].css'
- : '[name].[hash].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']
- }),
- /**
- * Plugin LoaderOptionsPlugin (experimental)
- *
- * See: https://gist.github.com/sokra/27b24881210b56bbaff7
- */
- new LoaderOptionsPlugin({
- options: {
- context: __dirname,
- output: {
- path: helpers.root('dist')
- }
- }
- })
- ],
- optimization: {
- minimizer: [
- new TerserPlugin({
- terserOptions: {
- ecma: 6,
- warnings: false,
- ie8: false,
- mangle: true,
- compress: {
- passes: 3,
- pure_getters: true
- },
- output: {
- ascii_only: true,
- comments: false
- }
- }
- })
- ]
- },
- performance: {
- maxEntrypointSize: 700000, // 600kB
- maxAssetSize: 700000
- },
- node: {
- global: true,
- crypto: 'empty',
- fs: 'empty',
- process: true,
- module: false,
- clearImmediate: false,
- setImmediate: false
- }
- }
- return configuration
- }
|