-
Notifications
You must be signed in to change notification settings - Fork 58
/
config.defaults.js
301 lines (280 loc) · 6.9 KB
/
config.defaults.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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
const babel = require('./babel');
let cwd = process.cwd();
let port = process.env.PORT || 3000;
let NODE_ENV = process.env.NODE_ENV || 'development';
let isDev = NODE_ENV === 'development';
let isProd = NODE_ENV === 'production';
module.exports = {
/**
* node.js 应用部署的 basename,默认是空字符串
* 支持传入字符串 如,'/my/basename'
* 支持传入数组,当传入为数组时,在运行时动态确定所匹配的 basename
*/
basename: '',
/**
* html 文档的 title
*/
title: 'react-imvc',
/**
* html 文档的 description
*/
description: 'An Isomorphic-MVC Framework',
/**
* html 文档的 keywords
*/
keywords: 'react mvc isomorphic server-side-rendering',
/**
* 服务端渲染的 content,默认为空
*/
content: '',
/**
* client app settings
* {
* hashType: 'hashbang', hash history 显示的起点缀,默认是 !
* container: '#root' // react 组件渲染的容器
* }
*/
appSettings: undefined,
/**
* react-imvc app 所在的根目录
* 默认是 cwd
*/
root: cwd,
/**
* page 源代码的目录
* 默认是 src
*/
src: 'src',
/**
* server 源代码的目录
* 默认为空
* 注意:express view path 也将被设置成 config.routes
*/
routes: 'routes',
/**
* 源码构建后的目录名(生产环境跑的代码目录)
* 默认是 publish
*/
publish: 'publish',
/**
* 源码里的静态资源构建后的目录名,该目录会出现在 publish 字段配置的目录下
* 默认是 static,即静态资源会出现在 /publish/static 目录下
*/
static: 'static',
/**
* node.js 静态资源服务的路径
* 默认是 /static
*/
staticPath: '/static',
/**
* hash history 的 spa 入口文件名,它将出现在 /static 目录下
* 如果设置了 staticEntry,react-imvc 在 build 阶段,使用关闭 SSR 的模式启动一次 react-imvc app
* 并访问 /__CREATE_STATIC_ENTRY__ 路径,将它的 html 响应内容作为静态入口 html 文件内容生成。
*/
staticEntry: false && 'index.html',
/**
* express.static(root, options) 的 options 参数
* http://expressjs.com/en/4x/api.html#express.static
*/
staticOptions: {},
/**
* 静态资源的发布路径,默认为空,为空时运行时修改为 basename + staticPath
* 可以将 /publish/static 目录发布到 CDN,并将 CDN 地址配置成 publicPath
*/
publicPath: '',
/**
* restapi basename
* 默认为空
* 如果配置了这个属性,controller.fetch 方法将为非绝对路径 url 参数,补上 restapi 作为前缀。
*/
restapi: '',
/**
* webpack 资源表所在的路径,相对于 webpack 的 output.path
* react-imvc 默认使用 hash 作为静态资源 js 的文件名
* 所以它需要生成一份 assets.json 表,匹配 vendor, index 等文件的 mapping 关系
*/
assetsPath: '../assets.json',
/**
* webpack output 自定义配置
* 默认为空
*/
output: {},
/**
* webpack 生产环境构建时的自定义 output 配置
* 默认为空
*/
productionOutput: {},
/**
* webpack alias 自定义配置
*/
alias: {},
/**
* webpack devtool 配置
*/
devtool: isDev ? 'cheap-module-eval-source-map' : '',
/**
* 是否开启 webpack 的构建产物进行可视化分析
* 默认不开启
*/
bundleAnalyzer: false,
/**
* 是否使用 webpack-dev-middleware 代理静态资源
* 默认在开发模式时开启
*/
webpackDevMiddleware: isDev,
/**
* webpack plugins 自定义配置
* 默认为空
*/
webpackPlugins: [],
/**
* webpack loaders 自定义配置
* 默认为空
*/
webpackLoaders: [],
/**
* 是否输出 webpack log 日志
*/
webpackLogger: {
chunks: false, // Makes the build much quieter
colors: true,
},
// babel config
babel: babel,
gulp: {
// 需要压缩到 static 目录的 css
css: [],
// 需要压缩到 static 目录的 html
html: [],
// 需要压缩到 static 目录的 js
js: [],
// 需要复制到 static 目录的非 html, css, js 文件
copy: [],
// 需要复制到 publish 目录的额外文件
publishCopy: [],
// 需要编译到 publish 目录的额外文件
publishBabel: [],
},
/**
* express 中间件 cookie-parser 的自定义配置
* 默认为空
*/
cookieParser: {},
/**
* express 中间件 helmet 的自定义配置
* 默认为空 frameguard = true
*/
helmet: {
frameguard: false,
hsts: {
// https://helmetjs.github.io/docs/hsts/
// 关闭默认的 Strict-Transport-Security
maxAge: 0,
},
},
/**
* express 中间件 compression 的自定义配置
* 默认为空
*/
compression: {},
/**
* express view engine 的自定义配置
*/
ReactViews: {
beautify: false, // 是否美化 html 响应内容
transformViews: false, // 默认不转换 view,已经有 babel 做处理
},
/**
* express 中间件 bodyParse 配置
*/
bodyParser: {
json: {
limit: '10MB',
},
urlencoded: {
extended: false,
},
},
/**
* express logger 配置
* 默认在开发阶段使用 dev,生产阶段不使用
*/
logger: isDev ? 'dev' : null,
/**
* express favicon 中间件的配置
* 默认没有 favicon
*/
favicon: '',
/**
* 是否开启 IMVC SSR 功能
* 默认开启
*/
SSR: true,
/**
* node.js server 监听的端口号
* 默认跟着 ENV 环境变量走,或者 3000
*/
port: port,
/**
* node.js 的环境变量备份
*/
NODE_ENV: NODE_ENV,
/**
* IMVC 的 layout 组件所在的路径
* 默认为空
* 当设置为相对路径时,基于 routes 配置的 path
*/
layout: '',
/**
* React SSR 时采用的渲染模式:renderToString || renderToNodeStream
*
*/
renderMode: 'renderToNodeStream',
/**
* IMVC APP 里的 context 参数
* server 端和 client 端都会接收到 config.context 里的配置
* 默认为空
*/
context: {},
/**
* 是否开启开发阶段的系统提示功能
*/
notifier: false,
/**
* 热更新开关 默认关闭
*/
hot: false,
/**
* 编译 node_modules 模块选项
*/
compileNodeModules: undefined,
/**
* 使用 fork-ts-checker-webpack-plugin 进行类型检查
*/
useTypeCheck: false,
/**
* 使用覆盖率检查
*/
useCoverage: process.env.USE_COVERAGE === '1',
/**
* 使用 babel-runtime
*/
useBabelRuntime: true,
/**
* 打包出来的服务端 bundle 的文件名
*/
serverBundleName: 'server.bundle.js',
/**
* 服务端渲染器
* 默认为空
*
* 支持:(view: React.ReactElement) => Promise<string | Buffer | NodeJS.ReadableStream> | string | Buffer | NodeJS.ReadableStream
*/
serverRenderer: undefined,
/**
* useContentHash
* 使用 contenthash 作为静态资源的 hash
* 默认为 false
*/
useContentHash: false
};