Skip to content
Snippets Groups Projects
webpack.config.js 3.94 KiB
Newer Older
Ray Schamp's avatar
Ray Schamp committed
var path = require('path');
var CopyWebpackPlugin = require('copy-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');

// PostCss
var autoprefixer = require('autoprefixer');
var postcssVars = require('postcss-simple-vars');
var postcssImport = require('postcss-import');
Ray Schamp's avatar
Ray Schamp committed
module.exports = {
    devServer: {
        contentBase: path.resolve(__dirname, 'build'),
        host: '0.0.0.0',
        port: process.env.PORT || 8601
    devtool: 'cheap-module-source-map',
Ray Schamp's avatar
Ray Schamp committed
    entry: {
Ray Schamp's avatar
Ray Schamp committed
        lib: ['react', 'react-dom'],
        gui: './src/index.jsx',
        blocksonly: './src/examples/blocks-only.jsx',
        compatibilitytesting: './src/examples/compatibility-testing.jsx',
        player: './src/examples/player.jsx'
Ray Schamp's avatar
Ray Schamp committed
    },
    output: {
        path: path.resolve(__dirname, 'build'),
Ray Schamp's avatar
Ray Schamp committed
        filename: '[name].js'
    },
Ray Schamp's avatar
Ray Schamp committed
    externals: {
        React: 'react',
        ReactDOM: 'react-dom'
    },
Ray Schamp's avatar
Ray Schamp committed
    module: {
Ray Schamp's avatar
Ray Schamp committed
        rules: [{
Ray Schamp's avatar
Ray Schamp committed
            test: /\.jsx?$/,
Ray Schamp's avatar
Ray Schamp committed
            loader: 'babel-loader',
chrisgarrity's avatar
chrisgarrity committed
            include: path.resolve(__dirname, 'src')
Ray Schamp's avatar
Ray Schamp committed
        {
            test: /\.css$/,
Ray Schamp's avatar
Ray Schamp committed
            use: [{
                loader: 'style-loader'
Ray Schamp's avatar
Ray Schamp committed
            }, {
Ray Schamp's avatar
Ray Schamp committed
                loader: 'css-loader',
                options: {
Ray Schamp's avatar
Ray Schamp committed
                    modules: true,
Ray Schamp's avatar
Ray Schamp committed
                    importLoaders: 1,
Ray Schamp's avatar
Ray Schamp committed
                    localIdentName: '[name]_[local]_[hash:base64:5]',
                    camelCase: true
                }
            }, {
Ray Schamp's avatar
Ray Schamp committed
                loader: 'postcss-loader',
                options: {
                    ident: 'postcss',
Ray Schamp's avatar
Ray Schamp committed
                    plugins: function () {
                        return [
                            postcssImport,
                            postcssVars,
Ray Schamp's avatar
Ray Schamp committed
                            autoprefixer({
                                browsers: ['last 3 versions', 'Safari >= 8', 'iOS >= 8']
                            })
                        ];
                    }
                }
            }]
Ray Schamp's avatar
Ray Schamp committed
        },
            test: /\.(svg|png|wav)$/,
            loader: 'file-loader'
Ray Schamp's avatar
Ray Schamp committed
        }]
    },
    plugins: [
        new webpack.DefinePlugin({
            'process.env.NODE_ENV': '"' + process.env.NODE_ENV + '"',
Ray Schamp's avatar
Ray Schamp committed
            'process.env.DEBUG': Boolean(process.env.DEBUG)
        new webpack.optimize.CommonsChunkPlugin({
Ray Schamp's avatar
Ray Schamp committed
            name: 'lib',
            filename: 'lib.min.js'
        }),
        new HtmlWebpackPlugin({
            chunks: ['lib', 'gui'],
            template: 'src/index.ejs',
            title: 'Scratch 3.0 GUI'
        }),
        new HtmlWebpackPlugin({
            chunks: ['lib', 'blocksonly'],
            template: 'src/index.ejs',
            filename: 'blocks-only.html',
            title: 'Scratch 3.0 GUI: Blocks Only Example'
        }),
        new HtmlWebpackPlugin({
            chunks: ['lib', 'compatibilitytesting'],
            template: 'src/index.ejs',
            filename: 'compatibility-testing.html',
            title: 'Scratch 3.0 GUI: Compatibility Testing'
        }),
        new HtmlWebpackPlugin({
            chunks: ['lib', 'player'],
            template: 'src/index.ejs',
            filename: 'player.html',
            title: 'Scratch 3.0 GUI: Player Example'
        }),
Ray Schamp's avatar
Ray Schamp committed
        new CopyWebpackPlugin([{
            from: 'static',
            to: 'static'
        }]),
        new CopyWebpackPlugin([{
            from: 'node_modules/scratch-blocks/media',
            to: 'static/blocks-media'
Christopher Willis-Ford's avatar
Christopher Willis-Ford committed
        }]),
        new CopyWebpackPlugin([{
            from: 'extensions/**',
            to: 'static',
            context: 'src/examples'
Christopher Willis-Ford's avatar
Christopher Willis-Ford committed
        }]),
        new CopyWebpackPlugin([{
            from: 'extension-worker.{js,js.map}',
Christopher Willis-Ford's avatar
Christopher Willis-Ford committed
            context: 'node_modules/scratch-vm/dist/web'
Ray Schamp's avatar
Ray Schamp committed
    ].concat(process.env.NODE_ENV === 'production' ? [
        new webpack.optimize.UglifyJsPlugin({
            include: /\.min\.js$/,
Ray Schamp's avatar
Ray Schamp committed
            minimize: true
Ray Schamp's avatar
Ray Schamp committed
};