| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- const fs = require('fs')
- const path = require('path')
- const MODULES_PATH = path.join(__dirname, '/modules')
- // Generate a hash of entry points, including modules
- const entryPoints = {}
- if (fs.existsSync(MODULES_PATH)) {
- fs.readdirSync(MODULES_PATH).reduce((acc, module) => {
- const entryPath = path.join(MODULES_PATH, module, '/public/es/index.js')
- if (fs.existsSync(entryPath)) {
- acc[module] = entryPath
- }
- return acc
- }, entryPoints)
- }
- // If no entry points are found, silently exit
- if (!Object.keys(entryPoints).length) {
- console.warn('No entry points found, exiting')
- process.exit(0)
- }
- module.exports = {
- // Defines the "entry point(s)" for the application - i.e. the file which
- // bootstraps the application
- entry: entryPoints,
- // Define where and how the bundle will be output to disk
- // Note: webpack-dev-server does not write the bundle to disk, instead it is
- // kept in memory for speed
- output: {
- path: path.join(__dirname, '/public/js/es'),
- filename: '[name].js',
- // Output as UMD bundle (allows main JS to import with CJS, AMD or global
- // style code bundles
- libraryTarget: 'umd',
- // Name the exported variable from output bundle
- library: ['Frontend', '[name]']
- },
- // Define how file types are handled by webpack
- module: {
- rules: [
- {
- // Pass application JS files through babel-loader, compiling to ES5
- test: /\.js$/,
- // Only compile application files (dependencies are in ES5 already)
- exclude: /node_modules/,
- use: [
- {
- loader: 'babel-loader',
- options: {
- // Configure babel-loader to cache compiled output so that
- // subsequent compile runs are much faster
- cacheDirectory: true
- }
- }
- ]
- },
- {
- // These options are neccesary for handlebars to have access to helper
- // methods
- test: /\.handlebars$/,
- loader: 'handlebars-loader',
- options: {
- compat: true,
- knownHelpersOnly: false,
- runtimePath: 'handlebars/runtime'
- }
- }
- ]
- },
- resolve: {
- alias: {
- // makes handlebars globally accessible to backbone
- handlebars: 'handlebars/dist/handlebars.min.js',
- jquery: path.join(__dirname, 'node_modules/jquery/dist/jquery')
- }
- }
- }
|