var webpack = require('webpack'); var path = require('path'); var resolveNgRoute = require('@angularclass/resolve-angular-routes'); var commonConfig = { resolve: { extensions: ['', '.ts', '.js', '.json'] }, module: { preLoaders: [ ], loaders: [ // TypeScript { test: /\.ts$/, loaders: ['ts-loader', 'angular2-template-loader'] }, { test: /\.html$/, loader: 'raw-loader' }, { test: /\.css$/, loader: 'raw-loader' }, { test: /\.json$/, loader: 'raw-loader' } ], }, plugins: [ new webpack.ContextReplacementPlugin( // The (\\|\/) piece accounts for path separators in *nix and Windows /angular(\\|\/)core(\\|\/)src(\\|\/)linker/, root('./src'), resolveNgRoute(root('./src')) ) ] }; var clientConfig = { target: 'web', entry: './src/client', output: { path: root('dist/client') }, node: { global: true, __dirname: true, __filename: true, process: true, Buffer: false } }; var serverConfig = { target: 'node', entry: './src/server', // use the entry file of the node server if everything is ts rather than es5 output: { path: root('dist/server'), libraryTarget: 'commonjs2' }, externals: checkNodeImport, node: { global: true, __dirname: true, __filename: true, process: true, Buffer: true } }; // Default config var defaultConfig = { context: __dirname, resolve: { root: root('/src') }, output: { publicPath: path.resolve(__dirname), filename: 'index.js' } } var webpackMerge = require('webpack-merge'); module.exports = [ // Client webpackMerge({}, defaultConfig, commonConfig, clientConfig), // Server webpackMerge({}, defaultConfig, commonConfig, serverConfig) ] // Helpers function checkNodeImport(context, request, cb) { if (!path.isAbsolute(request) && request.charAt(0) !== '.') { cb(null, 'commonjs ' + request); return; } cb(); } function root(args) { args = Array.prototype.slice.call(arguments, 0); return path.join.apply(path, [__dirname].concat(args)); }