Skip to content
Snippets Groups Projects
webpack.config.js 2.47 KiB
Newer Older
const path = require('path');
const ExtraWatchWebpackPlugin = require('extra-watch-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
// const CircularDependencyPlugin = require('circular-dependency-plugin');

const sharedConfig = {
    module: {
        rules: [
            {
                loader: 'raw-loader',
                test: /\.(glsl|frag|vert)$/,
Alexander Rose's avatar
Alexander Rose committed
                include: [ path.resolve(__dirname, 'build/src/') ],
            },
            {
                loader: 'glslify-loader',
                test: /\.(glsl|frag|vert)$/,
Alexander Rose's avatar
Alexander Rose committed
                include: [ path.resolve(__dirname, 'build/src/') ]
Alexander Rose's avatar
Alexander Rose committed
            },

            {
                loader: 'file-loader',
                test: /\.(woff2?|ttf|otf|eot|svg|html)$/,
Alexander Rose's avatar
Alexander Rose committed
                include: [ path.resolve(__dirname, 'build/src/') ],
Alexander Rose's avatar
Alexander Rose committed
                options: {
                    name: '[name].[ext]'
                }
            },
            {
                test:/\.(s*)css$/,
                use: [ MiniCssExtractPlugin.loader, 'css-loader', 'resolve-url-loader', 'sass-loader' ]
    },
    plugins: [
        // new CircularDependencyPlugin({
Alexander Rose's avatar
Alexander Rose committed
        //     include: [ path.resolve(__dirname, 'build/src/') ],
        //     failOnError: false,
        //     cwd: process.cwd(),
        // }),
        new ExtraWatchWebpackPlugin({
Alexander Rose's avatar
Alexander Rose committed
                './build/src/**/*.vert',
                './build/src/**/*.frag',
                './build/src/**/*.glsl',
                './build/src/**/*.scss',
                './build/src/**/*.html'
Alexander Rose's avatar
Alexander Rose committed
        new MiniCssExtractPlugin({ filename: 'app.css' })
    ],
    resolve: {
        modules: [
            'node_modules',
            path.resolve(__dirname, 'build/src/')
        ],
    }
}

function createEntryPoint(name, dir, out) {
    return {
Alexander Rose's avatar
Alexander Rose committed
        entry: path.resolve(__dirname, `build/src/${dir}/${name}.js`),
        output: { filename: `${name}.js`, path: path.resolve(__dirname, `build/${out}`) },
        ...sharedConfig
    }
}

function createApp(name) { return createEntryPoint('index', `apps/${name}`, name) }
function createBrowserTest(name) { return createEntryPoint(name, 'tests/browser', 'tests') }

module.exports = [
    createApp('viewer'),
    createApp('model-server-query'),

Alexander Rose's avatar
Alexander Rose committed
    createBrowserTest('font-atlas'),
    createBrowserTest('render-text'),
    createBrowserTest('render-shape'),
    createBrowserTest('render-spheres'),
    createBrowserTest('render-mesh')
]