UNPKG

3.34 kBJavaScriptView Raw
1// Webpack config for development
2var _ = require('lodash');
3var fs = require('fs-extra');
4var path = require('path');
5var webpack = require('webpack');
6var WebpackIsomorphicTools = require('webpack-isomorphic-tools');
7var cwd = process.cwd();
8var assetsPath = path.resolve(cwd, 'static/dist');
9var host = (process.env.HOST || 'localhost');
10var port = parseInt(process.env.PORT) + 1 || 3001;
11var rcPath = path.join(cwd, '.koikirc');
12var rc = fs.existsSync(rcPath) ? fs.readJsonSync(rcPath) : {};
13var env = require('../bin/lib/env');
14
15// https://github.com/halt-hammerzeit/webpack-isomorphic-tools
16var WebpackIsomorphicToolsPlugin = require('webpack-isomorphic-tools/plugin');
17var webpackIsomorphicToolsPlugin = new WebpackIsomorphicToolsPlugin(require('./webpack-isomorphic-tools'));
18
19module.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 : {});