1 |
|
2 | var _ = require('lodash');
|
3 | var fs = require('fs-extra');
|
4 | var path = require('path');
|
5 | var webpack = require('webpack');
|
6 | var WebpackIsomorphicTools = require('webpack-isomorphic-tools');
|
7 | var cwd = process.cwd();
|
8 | var assetsPath = path.resolve(cwd, 'static/dist');
|
9 | var host = (process.env.HOST || 'localhost');
|
10 | var port = parseInt(process.env.PORT) + 1 || 3001;
|
11 | var rcPath = path.join(cwd, '.koikirc');
|
12 | var rc = fs.existsSync(rcPath) ? fs.readJsonSync(rcPath) : {};
|
13 | var env = require('../bin/lib/env');
|
14 |
|
15 |
|
16 | var WebpackIsomorphicToolsPlugin = require('webpack-isomorphic-tools/plugin');
|
17 | var webpackIsomorphicToolsPlugin = new WebpackIsomorphicToolsPlugin(require('./webpack-isomorphic-tools'));
|
18 |
|
19 | module.exports = _.merge({
|
20 | devtool: 'inline-source-map',
|
21 | context: cwd,
|
22 | entry: {
|
23 | 'main': [
|
24 | `webpack-dev-server/client?http://${host}:${port}/`,
|
25 | path.resolve(cwd, 'src/client.js'),
|
26 | ]
|
27 | },
|
28 | output: {
|
29 | path: assetsPath,
|
30 | filename: '[name]-[hash].js',
|
31 | chunkFilename: '[name]-[chunkhash].js',
|
32 | publicPath: 'http://' + host + ':' + port + '/dist/'
|
33 | },
|
34 | module: {
|
35 | rules: [
|
36 | { test: /\.jsx?$/, exclude: /node_modules/, use: [{
|
37 | loader: 'buble-loader',
|
38 | options: {
|
39 | objectAssign: 'Object.assign'
|
40 | }
|
41 | }, 'eslint-loader']},
|
42 | { test: /\.css$/, use: ['style-loader', 'css-loader'] },
|
43 | { test: /\.less$/, use: [
|
44 | {
|
45 | loader: 'style-loader'
|
46 | },
|
47 | {
|
48 | loader: 'css-loader',
|
49 | options: {
|
50 | modules: true,
|
51 | importLoaders: 2,
|
52 | sourceMap: true,
|
53 | localIdentName: '[local]___[hash:base64:5]'
|
54 | },
|
55 | },
|
56 | {
|
57 | loader: 'less-loader',
|
58 | options: {
|
59 | outputStyle: 'expanded',
|
60 | sourceMap: true
|
61 | }
|
62 | },
|
63 | ]},
|
64 | { test: /\.scss$/, use: [
|
65 | {
|
66 | loader: 'style-loader'
|
67 | },
|
68 | {
|
69 | loader: 'css-loader',
|
70 | options: {
|
71 | modules: true,
|
72 | importLoaders: 2,
|
73 | sourceMap: true,
|
74 | localIdentName: '[local]___[hash:base64:5]'
|
75 | },
|
76 | },
|
77 | {
|
78 | loader: 'sass-loader',
|
79 | options: {
|
80 | outputStyle: 'expanded',
|
81 | sourceMap: true
|
82 | }
|
83 | },
|
84 | ]},
|
85 | { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: [ { loader: 'url-loader', options: { limit: 10000, mimetype: 'application/font-woff' } } ]},
|
86 | { test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: ['file-loader'] },
|
87 | { test: webpackIsomorphicToolsPlugin.regular_expression('images'), use: ['url-loader'] }
|
88 | ],
|
89 | },
|
90 | resolve: {
|
91 | modules: [
|
92 | path.join(cwd, 'src'),
|
93 | 'node_modules',
|
94 | 'i18n',
|
95 | ],
|
96 | extensions: ['.json', '.js', '.jsx', '.properties'],
|
97 | },
|
98 | plugins: [
|
99 | new webpack.IgnorePlugin(/webpack-stats\.json$/),
|
100 | new webpack.DefinePlugin({
|
101 | __CLIENT__: true,
|
102 | __SERVER__: false,
|
103 | __DEVELOPMENT__: true,
|
104 | 'process.env': env(),
|
105 | }),
|
106 | webpackIsomorphicToolsPlugin.development()
|
107 | ],
|
108 | externals: {
|
109 | fs: '{}',
|
110 | 'koiki-dev': '{}',
|
111 | express: '{}',
|
112 | passporter: '{}',
|
113 | passport: '{}'
|
114 | }
|
115 | }, rc.webpack && rc.webpack.dev ? rc.webpack.dev : {});
|