]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/config/webpack.common.js
Merge branch 'postgresql'
[github/Chocobozzz/PeerTube.git] / client / config / webpack.common.js
index 88a3639d2cbf52d01d45953bcdc28a5a71637d61..7631af6b9f449167375f54f4350cc2bb08d7f927 100644 (file)
@@ -10,6 +10,8 @@ const HtmlWebpackPlugin = require('html-webpack-plugin')
 const ForkCheckerPlugin = require('awesome-typescript-loader').ForkCheckerPlugin
 const AssetsPlugin = require('assets-webpack-plugin')
 const ContextReplacementPlugin = require('webpack/lib/ContextReplacementPlugin')
+const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin')
+const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin')
 const WebpackNotifierPlugin = require('webpack-notifier')
 
 /*
@@ -30,12 +32,6 @@ module.exports = function (options) {
   var isProd = options.env === 'production'
 
   return {
-    /*
-     * Static metadata for index.html
-     *
-     * See: (custom attribute)
-     */
-    metadata: METADATA,
 
     /*
      * Cache generated modules and chunks to improve performance for multiple incremental builds.
@@ -69,17 +65,13 @@ module.exports = function (options) {
        *
        * See: http://webpack.github.io/docs/configuration.html#resolve-extensions
        */
-      extensions: [ '', '.ts', '.js', '.scss' ],
+      extensions: [ '.ts', '.js', '.json', '.scss' ],
 
-      // Make sure root is src
-      root: helpers.root('src'),
-
-      // remove other default values
-      modulesDirectories: [ 'node_modules' ]
-    },
+      modules: [helpers.root('src'), 'node_modules'],
 
-    output: {
-      publicPath: '/client/'
+      alias: {
+        'video.js': 'video.js/dist/alt/video.novtt'
+      }
     },
 
     /*
@@ -88,33 +80,8 @@ module.exports = function (options) {
      * See: http://webpack.github.io/docs/configuration.html#module
      */
     module: {
-      /*
-       * An array of applied pre and post loaders.
-       *
-       * See: http://webpack.github.io/docs/configuration.html#module-preloaders-module-postloaders
-       */
-      preLoaders: [
-        {
-          test: /\.ts$/,
-          loader: 'string-replace-loader',
-          query: {
-            search: '(System|SystemJS)(.*[\\n\\r]\\s*\\.|\\.)import\\((.+)\\)',
-            replace: '$1.import($3).then(mod => (mod.__esModule && mod.default) ? mod.default : mod)',
-            flags: 'g'
-          },
-          include: [helpers.root('src')]
-        }
-      ],
 
-      /*
-       * An array of automatically applied loaders.
-       *
-       * IMPORTANT: The loaders here are resolved relative to the resource which they are applied to.
-       * This means they are not resolved relative to the configuration file.
-       *
-       * See: http://webpack.github.io/docs/configuration.html#module-loaders
-       */
-      loaders: [
+      rules: [
 
         /*
          * Typescript loader support for .ts and Angular 2 async routes via .async.ts
@@ -142,15 +109,11 @@ module.exports = function (options) {
         },
 
         {
-          test: /\.scss$/,
-          exclude: /node_modules/,
-          loaders: [ 'raw-loader', 'sass-loader' ]
-        },
-
-        {
-          test: /\.(woff2?|ttf|eot|svg)$/,
-          loader: 'url?limit=10000&name=assets/fonts/[hash].[ext]'
+          test: /\.(sass|scss)$/,
+          loaders: ['css-to-string-loader', 'css-loader?sourceMap', 'resolve-url', 'sass-loader?sourceMap']
         },
+        { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: 'url?limit=10000&minetype=application/font-woff' },
+        { test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: 'file' },
 
         /* Raw loader support for *.html
          * Returns file content as string
@@ -160,17 +123,13 @@ module.exports = function (options) {
         {
           test: /\.html$/,
           loader: 'raw-loader',
-          exclude: [ helpers.root('src/index.html') ]
+          exclude: [ helpers.root('src/index.html'), helpers.root('src/standalone/videos/embed.html') ]
         }
 
       ]
 
     },
 
-    sassLoader: {
-      precision: 10
-    },
-
     /*
      * Add additional plugins to the compiler.
      *
@@ -209,7 +168,7 @@ module.exports = function (options) {
        *
        * See: https://webpack.github.io/docs/list-of-plugins.html#contextreplacementplugin
        * See: https://github.com/angular/angular/issues/11580
-      */
+       */
       new ContextReplacementPlugin(
         // The (\\|\/) piece accounts for path separators in *nix and Windows
         /angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/,
@@ -224,6 +183,7 @@ module.exports = function (options) {
        *
        * See: https://www.npmjs.com/package/copy-webpack-plugin
        */
+      // Used by embed.html
       new CopyWebpackPlugin([
         {
           from: 'src/assets',
@@ -232,6 +192,26 @@ module.exports = function (options) {
         {
           from: 'node_modules/webtorrent/webtorrent.min.js',
           to: 'assets/webtorrent'
+        },
+        {
+          from: 'node_modules/video.js/dist/video.min.js',
+          to: 'assets/video-js'
+        },
+        {
+          from: 'node_modules/video.js/dist/video-js.min.css',
+          to: 'assets/video-js'
+        },
+        {
+          from: 'node_modules/videojs-dock/dist/videojs-dock.min.js',
+          to: 'assets/video-js'
+        },
+        {
+          from: 'node_modules/videojs-dock/dist/videojs-dock.css',
+          to: 'assets/video-js'
+        },
+        {
+          from: 'src/standalone',
+          to: 'standalone'
         }
       ]),
 
@@ -245,10 +225,37 @@ module.exports = function (options) {
        */
       new HtmlWebpackPlugin({
         template: 'src/index.html',
-        chunksSortMode: 'dependency'
+        title: METADATA.title,
+        chunksSortMode: 'dependency',
+        metadata: METADATA
+      }),
+
+      /*
+      * Plugin: ScriptExtHtmlWebpackPlugin
+      * Description: Enhances html-webpack-plugin functionality
+      * with different deployment options for your scripts including:
+      *
+      * See: https://github.com/numical/script-ext-html-webpack-plugin
+      */
+      new ScriptExtHtmlWebpackPlugin({
+        sync: [ 'webtorrent.min.js' ],
+        defaultAttribute: 'defer'
       }),
 
-      new WebpackNotifierPlugin({ alwaysNotify: true })
+      new WebpackNotifierPlugin({ alwaysNotify: true }),
+
+      /**
+      * Plugin LoaderOptionsPlugin (experimental)
+      *
+      * See: https://gist.github.com/sokra/27b24881210b56bbaff7
+      */
+      new LoaderOptionsPlugin({
+        options: {
+          sassLoader: {
+            precision: 10
+          }
+        }
+      })
     ],
 
     /*
@@ -258,10 +265,9 @@ module.exports = function (options) {
      * See: https://webpack.github.io/docs/configuration.html#node
      */
     node: {
-      global: 'window',
+      global: 'true',
       crypto: 'empty',
-      fs: 'empty',
-      events: true,
+      process: true,
       module: false,
       clearImmediate: false,
       setImmediate: false