/
webpack.config.js
123 lines (121 loc) · 3.51 KB
/
webpack.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
const webpack = require('webpack')
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ExtWebpackPlugin = require('@sencha/ext-react webpack-plugin')
const portfinder = require('portfinder')
const sourcePath = path.join(__dirname, './src')
module.exports = function (env) {
var browserprofile
var watchprofile
var buildenvironment = env.environment || process.env.npm_package_extbuild_defaultenvironment
if (buildenvironment == 'production') {
browserprofile = false
watchprofile = 'no'
}
else {
if (env.browser == undefined) {env.browser = true}
browserprofile = JSON.parse(env.browser) || true
watchprofile = env.watch || 'yes'
}
const isProd = buildenvironment === 'production'
var buildprofile = env.profile || process.env.npm_package_extbuild_defaultprofile
var buildenvironment = env.environment || process.env.npm_package_extbuild_defaultenvironment
var buildverbose = env.verbose || process.env.npm_package_extbuild_defaultverbose
if (buildprofile == 'all') { buildprofile = '' }
if (env.treeshake == undefined) {env.treeshake = false}
var treeshake = env.treeshake ? JSON.parse(env.treeshake) : false
portfinder.basePort = (env && env.port) || 1962
return portfinder.getPortPromise().then(port => {
const plugins = [
new HtmlWebpackPlugin({
template: 'index.html',
hash: true
}),
// new webpack.DefinePlugin({
// __API__: JSON.stringify('http://example.com/api')
// }),
new ExtWebpackPlugin({
framework: 'react',
toolkit: 'classic',
port: port,
emit: true,
browser: browserprofile,
watch: watchprofile,
profile: buildprofile,
environment: buildenvironment,
verbose: buildverbose,
theme: 'theme-triton',
treeshake: treeshake,
packages: []
})
]
if (!isProd) {
plugins.push(
new webpack.HotModuleReplacementPlugin()
)
}
return {
mode: 'development',
cache: true,
devtool: isProd ? 'source-map' : 'cheap-module-source-map',
context: sourcePath,
entry: {
'app': ['./index.js']
},
output: {
path: path.resolve(__dirname, 'build'),
filename: '[name].js'
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: [
'babel-loader'
]
},
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
}
]
},
resolve: {
// The following is only needed when running this boilerplate within the ext-react repo. You can remove this from your own projects.
alias: {
"react-dom": path.resolve('./node_modules/react-dom'),
"react": path.resolve('./node_modules/react')
}
},
plugins,
devServer: {
contentBase: './build',
historyApiFallback: true,
hot: false,
host: '0.0.0.0',
port: port,
disableHostCheck: false,
compress: isProd,
inline: !isProd,
stats: {
assets: false,
children: false,
chunks: false,
hash: false,
modules: false,
publicPath: false,
timings: false,
version: false,
warnings: false,
colors: {
green: '\u001b[32m'
}
}
}
}
})
}