Skip to content

Commit 73828c5

Browse files
authored
Merge pull request #46 from nighca/master
add config `transpileOnlyWhenDev` for tsx? transform
2 parents f6003a0 + 7428450 commit 73828c5

File tree

6 files changed

+70
-18
lines changed

6 files changed

+70
-18
lines changed

README.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
npm 包(适合本地开发用)
2020

2121
```shell
22+
# fec-builder 使用 npm-shrinkwrap.json 锁定依赖版本,yarn 不会识别 npm-shrinkwrap.json
23+
# 这里请使用 npm 安装全局包
2224
npm i fec-builder -g
2325
# 项目目录下执行
2426
fec-builder -p 8080
@@ -85,7 +87,7 @@ npm 包与 docker 镜像的对比,优点:
8587

8688
1. 直接使用 transformer 名,如 `"css"`、`"less"`
8789

88-
2. 一个 object,包含两个字段:`transformer` 与 `config`
90+
2. 一个 object,包含两个字段:`transformer` 与 `config`,具体各 transformer 对应的可配置项见下方 transformer 的配置
8991

9092
- `transformer`: 即 transformer 名,如 `babel`
9193
- `config`: 即 transformer 的配置,如
@@ -148,6 +150,23 @@ npm 包与 docker 镜像的对比,优点:
148150

149151
表示使用 `xxx`、`yyy` 分别作为 AccessKey 与 SecretKey,上传到名为 `zzz` 的 bucket。
150152

153+
### transformer 的配置
154+
155+
对于不同的 transformer,我们可以通过与 `transformer` 平级的 `config` 字段对 transformer 的行为进行配置,这里是不同 transformer 支持的配置项:
156+
157+
##### `ts`
158+
159+
* `transpileOnlyWhenDev: boolean = true`
160+
161+
对于 ts 的转换,builder 会默认在开发模式跳过类型检查,提高构建效率,避免过严的限制;这个行为可以通过配置 `transpileOnlyWhenDev` 为 `false` 禁用,即,在开发时也进行类型检查
162+
163+
##### `tsx`
164+
165+
* `transpileOnlyWhenDev: boolean = true`
166+
167+
同 `ts` 的 `transpileOnlyWhenDev` 配置
168+
169+
151170
### CHANGELOG
152171

153172
v1.4.0 及以后后的 Changelog 见 [Releases 页面](https://github.com/Front-End-Engineering-Cloud/builder/releases)

bin/fec-builder

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,11 @@ function applyArgv(argv) {
121121
}
122122

123123
function handleError(e) {
124-
logger.fatal(e)
124+
if (Array.isArray(e)) {
125+
e.forEach(item => logger.error(item))
126+
} else {
127+
logger.error(e)
128+
}
129+
logger.fatal('encountered error, exit 1')
125130
process.exit(1)
126131
}

lib/serve.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@ const serve = port => getWebpackConfig().then(
2323

2424
WebpackDevServer.addDevServerEntrypoints(webpackConfig, webpackDevServerConfig)
2525

26-
const compiler = webpack(webpackConfig)
27-
const server = new WebpackDevServer(compiler, webpackDevServerConfig)
28-
2926
logger.debug(`host: ${host}`)
3027
logger.debug(`port: ${port}`)
3128
logger.debug('dev server config:')
3229
logger.debug(webpackDevServerConfig)
3330
logger.debug('webpack config:')
3431
logger.debug(webpackConfig)
3532

33+
const compiler = webpack(webpackConfig)
34+
const server = new WebpackDevServer(compiler, webpackDevServerConfig)
35+
3636
server.listen(port, host, () => {
3737
logger.info(`Starting server on ${host}:${port}`)
3838
})

lib/webpack-config/addons/add-transform.js

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,8 @@ const addDefaultExtension = (config, extension) => {
131131
})
132132
}
133133

134-
const makeReactBabelOptions = config => {
135-
const options = config && config.babelOptions || {}
134+
const makeReactBabelOptions = babelOptions => {
135+
const options = babelOptions || {}
136136
const presets = options.presets || []
137137
const plugins = options.plugins || []
138138
return utils.extend(options, {
@@ -176,7 +176,11 @@ module.exports = (config, key, transform, post) => {
176176
case transforms.less:
177177
case transforms.sass:
178178
case transforms.stylus: {
179-
const { autoprefixOptions, modules, raw } = transform.config || {}
179+
const { autoprefixOptions, modules, raw } = utils.extend({
180+
autoprefixOptions: null,
181+
modules: false,
182+
raw: false
183+
}, transform.config)
180184

181185
const postcssOptions = makePostcssOptions({
182186
autoprefixOptions
@@ -225,12 +229,16 @@ module.exports = (config, key, transform, post) => {
225229
}
226230

227231
case transforms.jsx: {
232+
const transformConfig = utils.extend({
233+
babelOptions: undefined
234+
}, transform.config)
235+
228236
config = addDefaultExtension(config, extension)
229237
config = update(config, {
230238
module: { rules: {
231239
$push: [makeRule(extension, context, {
232240
loader: 'babel',
233-
options: makeReactBabelOptions(transform.config)
241+
options: makeReactBabelOptions(transformConfig.babelOptions)
234242
})]
235243
} }
236244
})
@@ -239,15 +247,23 @@ module.exports = (config, key, transform, post) => {
239247

240248
case transforms.ts:
241249
case transforms.tsx: {
250+
const transformConfig = utils.extend({
251+
// 默认开发模式跳过类型检查,提高构建效率,另,避免过严的限制
252+
transpileOnlyWhenDev: true,
253+
babelOptions: undefined
254+
}, transform.config)
255+
242256
const babelOptions = (
243257
transform.transformer === transforms.tsx
244-
? makeReactBabelOptions(transform.config)
245-
: transform.config
258+
? makeReactBabelOptions(transformConfig.babelOptions)
259+
: transformConfig.babelOptions
246260
)
247261

248262
const tsLoaderOptions = {
249-
// 开发模式跳过类型检查,提高构建效率,另,避免过严的限制
250-
transpileOnly: buildEnv.get() === 'development'
263+
transpileOnly: (
264+
transformConfig.transpileOnlyWhenDev
265+
&& buildEnv.get() === 'development'
266+
)
251267
}
252268

253269
config = addDefaultExtension(config, extension)

npm-shrinkwrap.json

Lines changed: 16 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"stylus": "^0.54.5",
3838
"stylus-loader": "^3.0.1",
3939
"svg-sprite-loader": "^0.2.1",
40-
"ts-loader": "^2.0.0",
40+
"ts-loader": "^2.2.2",
4141
"typescript": "^2.4.2",
4242
"vue-loader": "^13.0.4",
4343
"vue-template-compiler": "^2.4.2",

0 commit comments

Comments
 (0)