-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
build.impl.ts
54 lines (42 loc) · 1.57 KB
/
build.impl.ts
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
import 'dotenv/config';
import { ExecutorContext } from '@nrwl/devkit';
import build from 'next/dist/build';
import { PHASE_PRODUCTION_BUILD } from 'next/dist/next-server/lib/constants';
import { join, resolve } from 'path';
import { copySync, mkdir } from 'fs-extra';
import { prepareConfig } from '../../utils/config';
import { NextBuildBuilderOptions } from '../../utils/types';
import { createPackageJson } from './lib/create-package-json';
import { createNextConfigFile } from './lib/create-next-config-file';
import { directoryExists } from '@nrwl/workspace/src/utilities/fileutils';
import { createProjectGraph } from '@nrwl/workspace/src/core/project-graph';
import { calculateProjectDependencies } from '@nrwl/workspace/src/utilities/buildable-libs-utils';
export default async function buildExecutor(
options: NextBuildBuilderOptions,
context: ExecutorContext
) {
process.env.NODE_ENV ??= 'production';
const root = resolve(context.root, options.root);
const projGraph = createProjectGraph();
const { dependencies } = calculateProjectDependencies(
projGraph,
context.root,
context.projectName,
context.targetName,
context.configurationName
);
const config = await prepareConfig(
PHASE_PRODUCTION_BUILD,
options,
context,
dependencies
);
await build(root, config as any);
if (!directoryExists(options.outputPath)) {
mkdir(options.outputPath);
}
createPackageJson(options, context);
createNextConfigFile(options, context);
copySync(join(root, 'public'), join(options.outputPath, 'public'));
return { success: true };
}