Skip to content
Snippets Groups Projects
webpack.config.js 4.08 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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: 'node_modules/scratch-vm/dist/node/assets',
                to: 'static/extension-assets'
            }]),
    
    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
    };