UNPKG

paraview-glance

Version:

Web application for Visualizing Scientific and Medical datasets

174 lines (170 loc) 4.5 kB
const path = require('path'); const CopyPlugin = require('copy-webpack-plugin'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const { GenerateSW } = require('workbox-webpack-plugin'); const VueLoaderPlugin = require('vue-loader/lib/plugin'); const VuetifyLoaderPlugin = require('vuetify-loader/lib/plugin'); const WriteFilePlugin = require('write-file-webpack-plugin'); const autoprefixer = require('autoprefixer'); const vtkRules = require('vtk.js/Utilities/config/dependency').webpack; const externals = require('./externals.js'); const paths = { entry: path.join(__dirname, '../src/app.js'), source: path.join(__dirname, '../src'), externals: path.join(__dirname, '../externals'), output: path.join(__dirname, '../dist'), root: path.join(__dirname, '..'), node_modules: path.join(__dirname, '../node_modules'), }; module.exports = { entry: Object.assign({ glance: paths.entry, }, externals.getExternalEntries(paths.externals)), output: { path: paths.output, filename: '[name].[contenthash].js', libraryTarget: 'umd', }, module: { rules: [ { test: paths.entry, loader: 'expose-loader?Glance', }, { test: /\.vue$/, loader: 'vue-loader', }, { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/, }, { test: /\.(png|jpe?g|svg|ttf|woff2?|eot|otf)$/, loader: 'url-loader', options: { // Make sure this is just big enough to load one font file limit: 300000, }, }, { test: /\.css$/, exclude: /node_modules/, use: [], // prod/dev fills in the loaders }, { test: /\.css$/, exclude: /\.module\.css$/, include: /node_modules/, // prod/dev fills in the last loader use: ['css-loader'], }, { test: /\.pug$/, loader: "pug-plain-loader", }, { test: /\.s[ca]ss$/, // prod/dev fills in the last loader use: [ 'css-loader', 'sass-loader', ], }, { test: /\.(js|vue)$/, loader: 'eslint-loader', enforce: 'pre', }, /* for vtk.js styles */ { test: /\.module\.css$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader', options: { modules: { localIdentName: '[name]-[local]-[sha512:hash:base32:5]', }, }, }, { loader: 'postcss-loader', options: { plugins: () => [autoprefixer('last 3 version', 'ie >= 10')], }, }, ], }, ].concat(vtkRules.core.rules), }, plugins: [ new CleanWebpackPlugin({ cleanOnceBeforeBuildPatterns: ['**/*', '!version.js'], }), new VueLoaderPlugin(), new VuetifyLoaderPlugin(), new WriteFilePlugin(), new CopyPlugin([ { from: path.join( paths.node_modules, 'workbox-sw', 'build', 'importScripts', 'workbox-sw.prod.*.js' ), flatten: true, }, { from: path.join(paths.node_modules, 'itk'), to: 'itk', }, { from: path.join(paths.root, 'static'), }, { from: path.join(paths.root, 'itk', 'web-build', 'itkfiltering*'), to: path.join('itk', 'Pipelines'), flatten: true, }, ]), new GenerateSW({ cacheId: 'paraview-glance-', cleanupOutdatedCaches: true, include: [/\.js$/], exclude: ['serviceWorker.js'], swDest: path.join(paths.output, 'serviceWorker.js'), skipWaiting: true, runtimeCaching: [ { handler: 'CacheFirst', urlPattern: /(\.css|\.ttf|\.eot|\.woff|\.js|\.png|\.svg|\.wasm)$/, }, ], }), ], resolve: { extensions: ['.js', '.vue'], alias: { vue$: 'vue/dist/vue.esm.js', 'paraview-glance': paths.root, 'vtk.js/Sources/Rendering/Core/ColorTransferFunction/ColorMaps.json': path.join(paths.source, 'config/ColorMaps.json'), }, }, optimization: { runtimeChunk: 'single', splitChunks: { cacheGroups: { vendors: { test: /[\\/]node_modules[\\/]/, name: 'vendors', enforce: true, chunks: 'all', }, }, }, }, };