Skip to content
Snippets Groups Projects
shared.js 1.86 KiB
Newer Older
  • Learn to ignore specific revisions
  • // Note: You must restart bin/webpack-dev-server for changes to take effect
    
    /* eslint global-require: 0 */
    /* eslint import/no-dynamic-require: 0 */
    
    const webpack = require('webpack')
    const { basename, dirname, join, relative, resolve } = require('path')
    const { sync } = require('glob')
    const ExtractTextPlugin = require('extract-text-webpack-plugin')
    const ManifestPlugin = require('webpack-manifest-plugin')
    const extname = require('path-complete-extname')
    const { env, paths, publicPath, loadersDir } = require('./configuration.js')
    
    const extensionGlob = `**/*{${paths.extensions.join(',')}}*`
    const packPaths = sync(join(paths.source, paths.entry, extensionGlob))
    
    module.exports = {
      entry: packPaths.reduce(
        (map, entry) => {
          const localMap = map
          const namespace = relative(join(paths.source, paths.entry), dirname(entry))
          localMap[join(namespace, basename(entry, extname(entry)))] = resolve(entry)
          return localMap
        }, {}
      ),
    
      output: {
        filename: '[name].js',
        chunkFilename: '[name]-[chunkhash].js',
        path: resolve(paths.output, paths.entry),
        publicPath
      },
    
      module: {
        rules: sync(join(loadersDir, '*.js')).map(loader => require(loader))
      },
    
      plugins: [
        new webpack.EnvironmentPlugin(JSON.parse(JSON.stringify(env))),
        new ExtractTextPlugin(env.NODE_ENV === 'production' ? '[name]-[hash].css' : '[name].css'),
        new ManifestPlugin({ fileName: paths.manifest, publicPath, writeToFileEmit: true }),
        new webpack.optimize.CommonsChunkPlugin({
    
          name: 'common',
          minChunks: 2
    
        })
      ],
    
      resolve: {
        extensions: paths.extensions,
        modules: [
          resolve(paths.source),
          resolve(paths.node_modules)
        ]
      },
    
      resolveLoader: {
        modules: [paths.node_modules]
    
      },
    
      node: {
        // Called by http-link-header in an API we never use, increases
        // bundle size unnecessarily
        Buffer: false