/
index.js
73 lines (63 loc) 路 2 KB
/
index.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
/** @type {import('@nodepack/service').ServicePlugin} */
module.exports = (api, options) => {
const path = require('path')
const useThreads = process.env.NODE_ENV === 'production' && options.parallel
// Default entry
try {
// eslint-disable-next-line node/no-extraneous-require
const DefaultEntry = require('@nodepack/service/src/util/defaultEntry')
DefaultEntry.config.defaultEntry = 'index.ts'
} catch (e) {
console.error(e)
}
api.chainWebpack(config => {
config.resolveLoader.modules.prepend(path.join(__dirname, 'node_modules'))
config.resolve
.extensions
.merge(['.ts'])
const tsRule = config.module.rule('ts').test(/\.ts$/)
const addLoader = ({ loader, options = {}}) => {
tsRule.use(loader).loader(loader).options(options)
}
addLoader({
loader: 'cache-loader',
options: api.genCacheConfig('ts-loader', {
'ts-loader': require('ts-loader/package.json').version,
'typescript': require('typescript/package.json').version,
}, 'tsconfig.json'),
})
if (useThreads) {
addLoader({
loader: 'thread-loader',
})
}
if (api.hasPlugin('babel')) {
addLoader({
loader: 'babel-loader',
})
}
addLoader({
loader: 'ts-loader',
options: {
// https://github.com/TypeStrong/ts-loader#happypackmode-boolean-defaultfalse
happyPackMode: useThreads,
},
})
})
if (!api.hasPlugin('eslint')) {
api.registerCommand('lint', {
description: 'lint source files with TSLint',
usage: 'nodepack-service lint [options] [...files]',
options: {
'--format [formatter]': 'specify formatter (default: codeFrame)',
'--no-fix': 'do not fix errors',
'--formatters-dir [dir]': 'formatter directory',
'--rules-dir [dir]': 'rules directory',
},
}, args => {
return require('./lib/tslint')(args, api)
})
}
api.addRuntimeModule('./runtime.ejs')
// api.addRuntimeModule('./runtime.js')
}