UNPKG

2.16 kBJavaScriptView Raw
1/* eslint-env node */
2const {basename, join, resolve} = require('path');
3const {readdirSync} = require('fs');
4const extname = require('path-complete-extname');
5const clearPacks = require('./utils/clear_files');
6
7const {
8 devServer
9 , env
10 , loadersDir
11 , paths
12 , publicPath
13} = require('./configuration.js');
14
15const {
16 getIfUtils
17 , removeEmpty
18} = require('webpack-config-utils');
19
20const {ifDevelopment, ifProduction} = getIfUtils(env.NODE_ENV);
21
22if (env.NODE_ENV === 'production'){
23 clearPacks();
24}
25
26let plugins = require('./plugins');
27let entry = require('./entries');
28
29const modules = removeEmpty([
30 resolve('src')
31 , resolve(paths.source, paths.entry)
32 , (paths.image_entry) ? resolve(paths.source, paths.image_entry) : undefined
33 , (paths.stylesheets_entry) ? resolve(paths.source, paths.stylesheets_entry) : undefined
34 , resolve(paths.node_modules)
35]);
36
37const rules = removeEmpty(
38 readdirSync(loadersDir, 'utf8').map((file)=>{
39 if (extname(file) === '.js'){
40 if (!paths.stylesheets_entry && basename(file) === 'sass.js'){
41 return;
42 } else if (!paths.image_entry && basename(file) === 'assets.js'){
43 return;
44 }
45
46 return require(join(loadersDir, file));
47 }
48 })
49);
50
51const config = {
52 devtool: ifProduction('source-map', 'eval')
53 , context: resolve(paths.source)
54 , entry
55 , output: {
56 filename: ifProduction('[name]-[chunkhash].js', '[name].js')
57 , path: resolve(paths.output, paths.entry)
58 , pathinfo: true
59 , publicPath: ifDevelopment(`/${paths.entry}/`)
60 }
61
62 , module: {
63 rules
64 }
65
66 , plugins
67
68 , resolve: {
69 extensions: paths.extensions
70 , alias: {
71 images: resolve(paths.source, 'images')
72 }
73 , modules
74 }
75
76 , resolveLoader: {
77 modules: [resolve(paths.node_modules)]
78 }
79
80 , stats: {
81 cached: true
82 , colors: true
83 , errorDetails: true
84 , errors: true
85 }
86};
87
88module.exports = {
89 config
90 , devServer: {devServer: {
91 hot: true
92 , host: devServer.host
93 , port: devServer.port
94 , compress: true
95 , historyApiFallback: true
96 , contentBase: resolve(paths.output, paths.entry)
97 , publicPath
98 }
99 }
100};