@acransac/vtk.js
Version:
Visualization Toolkit for the Web
166 lines (158 loc) • 3.6 kB
JavaScript
// node modules
const path = require('path');
const { merge } = require('webpack-merge');
// webpack plugins
const WebpackNotifierPlugin = require('webpack-notifier');
// config files
const pkg = require('./package.json');
const settings = require('./webpack.settings.js');
// Configure Entries
const configureEntries = () => {
const entries = {};
const keys = Object.keys(settings.entries);
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
const value = settings.entries[key];
entries[key] = path.resolve(__dirname, settings.paths.src.base + value);
}
return entries;
};
// Configure vtk rules
function configureVtkRules() {
return [
{
test: /\.js$/,
loader: 'eslint-loader',
exclude: /node_modules/,
enforce: 'pre',
options: { configFile: path.join(__dirname, '.eslintrc.js') },
},
{
test: /\.glsl$/i,
loader: 'shader-loader',
},
{
test: /\.js$/,
include: path.resolve(__dirname, 'Sources'),
use: [
{
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
},
},
],
},
{
test: /\.css$/,
exclude: /\.module\.css$/,
use: [
{ loader: 'style-loader' },
{ loader: 'css-loader' },
{ loader: 'postcss-loader' },
],
},
{
test: /\.module\.css$/,
use: [
{ loader: 'style-loader' },
{
loader: 'css-loader',
options: {
modules: {
localIdentName: '[name]-[local]_[sha512:hash:base64:5]',
},
},
},
{ loader: 'postcss-loader' },
],
},
{
test: /\.svg$/,
use: [{ loader: 'raw-loader' }],
},
{
test: /\.worker\.js$/,
use: [{ loader: 'worker-loader', options: { inline: 'no-fallback' } }],
},
];
}
// The base webpack config
const baseConfig = {
name: pkg.name,
entry: configureEntries(),
output: {
path: path.resolve(__dirname, settings.paths.dist.base),
publicPath: settings.urls.publicPath,
libraryTarget: 'umd',
},
resolve: {
alias: {
'vtk.js': __dirname,
},
fallback: { stream: require.resolve('stream-browserify') },
},
module: {
rules: configureVtkRules(),
},
plugins: [
new WebpackNotifierPlugin({
title: 'Webpack - vtk.js',
excludeWarnings: true,
alwaysNotify: true,
}),
],
};
// vtk-lite.js
// => Smaller list of color maps
// => Remove
// - PDBReader
// - MoleculeToRepresentation
// - webvr-polyfill
// - Logo.svg
// - MobileVR
const liteConfig = merge(
{
module: {
rules: [
{
test: /MobileVR/,
loader: 'ignore-loader',
},
{
test: /Logo\.svg/,
loader: 'ignore-loader',
},
{
test: /MoleculeToRepresentation/,
loader: 'ignore-loader',
},
{
test: /PDBReader/,
loader: 'ignore-loader',
},
{ test: /webvr-polyfill/, loader: 'ignore-loader' },
],
},
resolve: {
alias: {
'vtk.js/Sources/Rendering/Core/ColorTransferFunction/ColorMaps.json': path.join(
__dirname,
'Sources/Rendering/Core/ColorTransferFunction/LiteColorMaps.json'
),
},
fallback: { stream: require.resolve('stream-browserify') },
},
},
baseConfig,
{
output: {
filename: '[name]-lite.js',
},
}
);
// Common module exports
module.exports = {
baseConfig,
liteConfig,
};