Project

General

Profile

1
var webpack = require('webpack');
2
var path = require('path');
3
var resolveNgRoute = require('@angularclass/resolve-angular-routes');
4

    
5

    
6
var commonConfig = {
7
  resolve: {
8
    extensions: ['', '.ts', '.js', '.json']
9
  },
10
  module: {
11
    preLoaders: [
12
    ],
13
    loaders: [
14
      // TypeScript
15
      { test: /\.ts$/, loaders: ['ts-loader', 'angular2-template-loader'] },
16
      { test: /\.html$/, loader: 'raw-loader' },
17
      { test: /\.css$/, loader: 'raw-loader' },
18
      { test: /\.json$/, loader: 'raw-loader' }
19
    ],
20
  },
21
  plugins: [
22
    new webpack.ContextReplacementPlugin(
23
      // The (\\|\/) piece accounts for path separators in *nix and Windows
24
      /angular(\\|\/)core(\\|\/)src(\\|\/)linker/,
25
      root('./src'),
26
      resolveNgRoute(root('./src'))
27
    )
28
  ]
29

    
30
};
31

    
32

    
33
var clientConfig = {
34
  target: 'web',
35
  entry: './src/client',
36
  output: {
37
    path: root('dist/client')
38
  },
39
  node: {
40
    global: true,
41
    __dirname: true,
42
    __filename: true,
43
    process: true,
44
    Buffer: false
45
  }
46
};
47

    
48

    
49
var serverConfig = {
50
  target: 'node',
51
  entry: './src/server', // use the entry file of the node server if everything is ts rather than es5
52
  output: {
53
    path: root('dist/server'),
54
    libraryTarget: 'commonjs2'
55
  },
56
  externals: checkNodeImport,
57
  node: {
58
    global: true,
59
    __dirname: true,
60
    __filename: true,
61
    process: true,
62
    Buffer: true
63
  }
64
};
65

    
66

    
67

    
68
// Default config
69
var defaultConfig = {
70
  context: __dirname,
71
  resolve: {
72
    root: root('/src')
73
  },
74
  output: {
75
    publicPath: path.resolve(__dirname),
76
    filename: 'index.js'
77
  }
78
}
79

    
80

    
81

    
82
var webpackMerge = require('webpack-merge');
83
module.exports = [
84
  // Client
85
  webpackMerge({}, defaultConfig, commonConfig, clientConfig),
86

    
87
  // Server
88
  webpackMerge({}, defaultConfig, commonConfig, serverConfig)
89
]
90

    
91
// Helpers
92
function checkNodeImport(context, request, cb) {
93
  if (!path.isAbsolute(request) && request.charAt(0) !== '.') {
94
    cb(null, 'commonjs ' + request); return;
95
  }
96
  cb();
97
}
98

    
99
function root(args) {
100
  args = Array.prototype.slice.call(arguments, 0);
101
  return path.join.apply(path, [__dirname].concat(args));
102
}
(6-6/6)