81 lines
2.1 KiB
TypeScript
81 lines
2.1 KiB
TypeScript
import 'dotenv/config';
|
|
import {
|
|
ExecutorContext,
|
|
parseTargetString,
|
|
readTargetOptions,
|
|
runExecutor,
|
|
workspaceLayout,
|
|
} from '@nrwl/devkit';
|
|
import exportApp from 'next/dist/export';
|
|
import { join, resolve } from 'path';
|
|
import {
|
|
calculateProjectDependencies,
|
|
DependentBuildableProjectNode,
|
|
} from '@nrwl/js/src/utils/buildable-libs-utils';
|
|
|
|
import { prepareConfig } from '../../utils/config';
|
|
import {
|
|
NextBuildBuilderOptions,
|
|
NextExportBuilderOptions,
|
|
} from '../../utils/types';
|
|
import { PHASE_EXPORT } from '../../utils/constants';
|
|
import nextTrace = require('next/dist/trace');
|
|
|
|
export default async function exportExecutor(
|
|
options: NextExportBuilderOptions,
|
|
context: ExecutorContext
|
|
) {
|
|
let dependencies: DependentBuildableProjectNode[] = [];
|
|
if (!options.buildLibsFromSource) {
|
|
const result = calculateProjectDependencies(
|
|
context.projectGraph,
|
|
context.root,
|
|
context.projectName,
|
|
'build', // this should be generalized
|
|
context.configurationName
|
|
);
|
|
dependencies = result.dependencies;
|
|
}
|
|
|
|
const libsDir = join(context.root, workspaceLayout().libsDir);
|
|
const buildTarget = parseTargetString(options.buildTarget);
|
|
const build = await runExecutor(buildTarget, {}, context);
|
|
|
|
for await (const result of build) {
|
|
if (!result.success) {
|
|
return result;
|
|
}
|
|
}
|
|
|
|
const buildOptions = readTargetOptions<NextBuildBuilderOptions>(
|
|
buildTarget,
|
|
context
|
|
);
|
|
const root = resolve(context.root, buildOptions.root);
|
|
const config = await prepareConfig(
|
|
PHASE_EXPORT,
|
|
buildOptions,
|
|
context,
|
|
dependencies,
|
|
libsDir
|
|
);
|
|
|
|
// Taken from:
|
|
// https://github.com/vercel/next.js/blob/ead56eaab68409e96c19f7d9139747bac1197aa9/packages/next/cli/next-export.ts#L13
|
|
const nextExportCliSpan = nextTrace.trace('next-export-cli');
|
|
|
|
await exportApp(
|
|
root,
|
|
{
|
|
statusMessage: 'Exporting',
|
|
silent: options.silent,
|
|
threads: options.threads,
|
|
outdir: `${buildOptions.outputPath}/exported`,
|
|
} as any,
|
|
nextExportCliSpan,
|
|
config
|
|
);
|
|
|
|
return { success: true };
|
|
}
|