Skip to content
Snippets Groups Projects
webpack.config.js 3.83 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 = {
Alexander Rose's avatar
Alexander Rose committed
            {
                test: /\.(woff2?|ttf|otf|eot|svg|html)$/,
Alexander Rose's avatar
Alexander Rose committed
                use: [{
                    loader: 'file-loader',
                    options: { name: '[name].[ext]' }
                }]
                test: /\.(s*)css$/,
Alexander Rose's avatar
Alexander Rose committed
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader', 'resolve-url-loader', 'sass-loader'
                ]
    },
    plugins: [
        // new CircularDependencyPlugin({
        //     include: [ path.resolve(__dirname, 'lib/') ],
        //     failOnError: false,
        //     cwd: process.cwd(),
        // }),
        new ExtraWatchWebpackPlugin({
                './lib/**/*.scss',
                './lib/**/*.html'
        new webpack.DefinePlugin({
            __PLUGIN_VERSION_TIMESTAMP__: webpack.DefinePlugin.runtimeValue(() => `${new Date().valueOf()}`, true),
Alexander Rose's avatar
Alexander Rose committed
            'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
            'process.env.DEBUG': JSON.stringify(process.env.DEBUG)
Alexander Rose's avatar
Alexander Rose committed
        new MiniCssExtractPlugin({ filename: 'app.css' })
    ],
    resolve: {
        modules: [
            'node_modules',
            path.resolve(__dirname, 'lib/')
Alexander Rose's avatar
Alexander Rose committed
        ],
    }
David Sehnal's avatar
David Sehnal committed

function createEntry(src, outFolder, outFilename, isNode) {
    return {
        node: isNode ? void 0 : { fs: 'empty' }, // TODO find better solution? Currently used in file-handle.ts
        target: isNode ? 'node' : void 0,
        entry: path.resolve(__dirname, `lib/${src}.js`),
David Sehnal's avatar
David Sehnal committed
        output: { filename: `${outFilename}.js`, path: path.resolve(__dirname, `build/${outFolder}`) },
        ...sharedConfig
    }
}

function createEntryPoint(name, dir, out) {
    return {
        node: { fs: 'empty' }, // TODO find better solution? Currently used in file-handle.ts
        entry: path.resolve(__dirname, `lib/${dir}/${name}.js`),
        output: { filename: `${name}.js`, path: path.resolve(__dirname, `build/${out}`) },
        ...sharedConfig
    }
}

function createNodeEntryPoint(name, dir, out) {
    return {
        target: 'node',
        entry: path.resolve(__dirname, `lib/${dir}/${name}.js`),
        output: { filename: `${name}.js`, path: path.resolve(__dirname, `build/${out}`) },
        externals: {
            argparse: 'require("argparse")',
            'node-fetch': 'require("node-fetch")',
            'util.promisify': 'require("util.promisify")',
            xhr2: 'require("xhr2")',
        },
        ...sharedConfig
    }
}

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

module.exports = [
    createApp('viewer'),
David Sehnal's avatar
David Sehnal committed
    createApp('basic-wrapper'),
David Sehnal's avatar
David Sehnal committed
    createEntry('examples/proteopedia-wrapper/index', 'examples/proteopedia-wrapper', 'index'),
Alexander Rose's avatar
Alexander Rose committed
    createEntry('apps/demos/lighting/index', 'demos/lighting', 'index'),
    createNodeApp('state-docs'),
    createNodeEntryPoint('preprocess', 'servers/model', 'model-server'),
    createApp('model-server-query'),

Alexander Rose's avatar
Alexander Rose committed
    createBrowserTest('font-atlas'),
    createBrowserTest('render-asa'),
Alexander Rose's avatar
Alexander Rose committed
    createBrowserTest('marching-cubes'),
Alexander Rose's avatar
Alexander Rose committed
    createBrowserTest('render-lines'),
Alexander Rose's avatar
Alexander Rose committed
    createBrowserTest('render-mesh'),
    createBrowserTest('render-shape'),
    createBrowserTest('render-spheres'),
Alexander Rose's avatar
Alexander Rose committed
    createBrowserTest('render-structure'),
    createBrowserTest('render-text'),