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
94import { Command, CommanderStatic } from 'commander';
import { ERROR_PREFIX } from '../lib/ui';
import { AbstractCommand } from './abstract.command';
import { Input } from './command.input';
export class BuildCommand extends AbstractCommand {
public load(program: CommanderStatic): void {
program
.command('build [apps...]')
.option('-c, --config [path]', 'Path to nest-cli configuration file.')
.option('-p, --path [path]', 'Path to tsconfig file.')
.option('-w, --watch', 'Run in watch mode (live-reload).')
.option('-b, --builder [name]', 'Builder to be used (tsc, webpack, swc).')
.option('--watchAssets', 'Watch non-ts (e.g., .graphql) files mode.')
.option(
'--webpack',
'Use webpack for compilation (deprecated option, use --builder instead).',
)
.option('--type-check', 'Enable type checking (when SWC is used).')
.option('--webpackPath [path]', 'Path to webpack configuration.')
.option('--tsc', 'Use typescript compiler for compilation.')
.option(
'--preserveWatchOutput',
'Use "preserveWatchOutput" option when using tsc watch mode.',
)
.option('--all', 'Build all projects in a monorepo.')
.description('Build Nest application.')
.action(async (apps: string[], command: Command) => {
const options: Input[] = [];
options.push({
name: 'config',
value: command.config,
});
const isWebpackEnabled = command.tsc ? false : command.webpack;
options.push({ name: 'webpack', value: isWebpackEnabled });
options.push({ name: 'watch', value: !!command.watch });
options.push({ name: 'watchAssets', value: !!command.watchAssets });
options.push({
name: 'path',
value: command.path,
});
options.push({
name: 'webpackPath',
value: command.webpackPath,
});
const availableBuilders = ['tsc', 'webpack', 'swc'];
if (command.builder && !availableBuilders.includes(command.builder)) {
console.error(
ERROR_PREFIX +
` Invalid builder option: ${
command.builder
}. Available builders: ${availableBuilders.join(', ')}`,
);
return;
}
options.push({
name: 'builder',
value: command.builder,
});
options.push({
name: 'typeCheck',
value: command.typeCheck,
});
options.push({
name: 'preserveWatchOutput',
value:
!!command.preserveWatchOutput &&
!!command.watch &&
!isWebpackEnabled,
});
options.push({ name: 'all', value: !!command.all });
const inputs: Input[] = apps.map((app) => ({
name: 'app',
value: app,
}));
// Handle the default project for `nest build` with no args
// The action instance will pick up the default project when value is `undefined`
if (inputs.length === 0) {
inputs.push({ name: 'app', value: undefined! });
}
await this.action.handle(inputs, options);
});
}
}