-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkoot.config.js
199 lines (174 loc) · 6.39 KB
/
koot.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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
/**
* @module kootConfig
*
* Koot.js 项目配置
*
* 配置文档请查阅: [https://koot.js.org/#/config]
*/
const fs = require('fs-extra');
const path = require('path');
const appName = 'Koot Clinic';
module.exports = {
/**************************************************************************
* 项目信息
*************************************************************************/
name: appName,
type: 'react',
dist: './dist/dist-ssr-server',
template: './src/index.ejs',
templateInject: './src/index.inject.js',
routes: './src/routes',
store: './src/store',
cookiesToStore: true,
i18n: [['zh', './src/locales/zh.json']],
aliases: {
'@src': path.resolve('./src'),
'@srcApiServer': path.resolve('./src-api-server'),
'@api': path.resolve('./src/apis'),
'@assets': path.resolve('./src/assets'),
'@commons': path.resolve('./src/common'),
'@components': path.resolve('./src/components'),
'@constants': path.resolve('./src/constants'),
'@locales': path.resolve('./src/locales'),
'@router': path.resolve('./src/router'),
'@server': path.resolve('./src/server'),
'@store': path.resolve('./src/store'),
'@utils': path.resolve('./src/utils'),
'@views': path.resolve('./src/views'),
'~vars.less': path.resolve('./src/constants/less/_all.less')
},
defines: {
__NAME__: JSON.stringify(appName),
__DOMAIN__: JSON.stringify('clinic.cmcm.com'),
__SVG_ICON_PACK__: JSON.stringify(
fs.readFileSync(
path.resolve(__dirname, './src/assets/symbol-defs.svg'),
'utf-8'
)
).replace(/\n/g, '')
},
staticCopyFrom: path.resolve(__dirname, './src/assets/public'),
// 更多选项请查阅文档...
/**************************************************************************
* 客户端生命周期
*************************************************************************/
// 选项请查阅文档...
/**************************************************************************
* 服务器端设置 & 生命周期
*************************************************************************/
port: 8080,
proxyRequestOrigin: {
protocol: 'http'
},
serverBefore: './src/server/before',
// 更多选项请查阅文档...
/**************************************************************************
* Webpack 相关
*************************************************************************/
webpackConfig: async () => {
/** @type {Object} 基础配置 */
const configBase = {
entry: {
/**
* 自定入口文件,需要手动编写使用逻辑
* - 该模板项目中,本 `critical` 入口的结果会被自动写入到 HTML 结果内,位于 `<body>` 标签中所有自动插入的 `<script>` 标签之前
* - 详见模板文件 `/src/index.ejs` 内的 `<%- content('critical.js') %>`
*/
critical: [path.resolve(__dirname, './src/critical.js')]
/**
* Koot.js 会自动加入一个名为 `client` 的入口,其中包含所有 React 相关逻辑
* - 模板中的 `<%- inject.scripts %>` 会被自动替换为 `client` 入口的相关内容
*/
},
module: {
rules: [
/**
* Koot.js 会为以下类型的文件自动添加 loader,无需进行配置
* - `js` `mjs` `jsx`
* - `css` `sass` `less`
*/
{
test: /\.(ico|gif|jpg|jpeg|png|webp)$/,
// loader: 'file-loader',
loader: 'url-loader',
options: {
limit: 1 * 1024,
context: 'static',
name: 'assets/[hash:32].[ext]',
emitFile: Boolean(
process.env.WEBPACK_BUILD_STAGE === 'client'
)
}
},
{
test: /\.svg$/,
loader: 'svg-url-loader',
exclude: /node_modules/,
options: {
noquotes: true,
limit: 5 * 1024
}
}
]
}
// plugins: [
// new webpack.EnvironmentPlugin(['KOOT_CLINIC_API_SERVER_PORT'])
// ]
};
// 针对:开发环境
if (process.env.WEBPACK_BUILD_ENV === 'dev')
return {
...configBase
};
// 针对:生产环境
// `entry` 项仅针对:客户端
return {
...configBase,
entry: {
commons: [
'react',
'react-dom',
'redux',
'redux-thunk',
'react-redux',
'react-router',
'react-router-redux',
'js-cookie',
'classnames',
'axios'
],
...configBase.entry
},
optimization: {
splitChunks: {
cacheGroups: {
commons: {
name: 'koot-clinic',
chunks: 'initial',
minChunks: 2,
reuseExistingChunk: true
}
}
}
}
};
},
webpackAfter: require('./scripts/koot/webpack-after'),
// 更多选项请查阅文档...
/**************************************************************************
* 开发环境
*************************************************************************/
devPort: 3088,
devDll: [
'react',
'react-dom',
'redux',
'react-redux',
'react-router',
'react-router-redux',
'koot',
'axios',
'classnames'
]
// 更多选项请查阅文档...
};