92 lines
2.7 KiB
TypeScript
92 lines
2.7 KiB
TypeScript
import type { Tree } from '@nx/devkit';
|
|
import {
|
|
joinPathFragments,
|
|
readNxJson,
|
|
readProjectConfiguration,
|
|
updateNxJson,
|
|
updateProjectConfiguration,
|
|
} from '@nx/devkit';
|
|
import type { Schema } from '../schema';
|
|
|
|
export function updateProjectConfig(tree: Tree, schema: Schema) {
|
|
let projectConfig = readProjectConfiguration(tree, schema.project);
|
|
|
|
projectConfig.targets.build.options.outputPath = `dist/apps/${schema.project}/browser`;
|
|
|
|
const buildTargetFileReplacements =
|
|
projectConfig.targets.build.configurations?.production?.fileReplacements;
|
|
|
|
projectConfig.targets.server = {
|
|
dependsOn: ['build'],
|
|
executor: '@angular-devkit/build-angular:server',
|
|
options: {
|
|
outputPath: `dist/${projectConfig.root}/server`,
|
|
main: joinPathFragments(projectConfig.root, schema.serverFileName),
|
|
tsConfig: joinPathFragments(projectConfig.root, 'tsconfig.server.json'),
|
|
},
|
|
configurations: {
|
|
production: {
|
|
outputHashing: 'media',
|
|
...(buildTargetFileReplacements
|
|
? { fileReplacements: buildTargetFileReplacements }
|
|
: {}),
|
|
},
|
|
development: {
|
|
optimization: false,
|
|
sourceMap: true,
|
|
extractLicenses: false,
|
|
},
|
|
},
|
|
defaultConfiguration: 'production',
|
|
};
|
|
|
|
projectConfig.targets['serve-ssr'] = {
|
|
executor: '@nguniversal/builders:ssr-dev-server',
|
|
configurations: {
|
|
development: {
|
|
browserTarget: `${schema.project}:build:development`,
|
|
serverTarget: `${schema.project}:server:development`,
|
|
},
|
|
production: {
|
|
browserTarget: `${schema.project}:build:production`,
|
|
serverTarget: `${schema.project}:server:production`,
|
|
},
|
|
},
|
|
defaultConfiguration: 'development',
|
|
};
|
|
|
|
projectConfig.targets.prerender = {
|
|
executor: '@nguniversal/builders:prerender',
|
|
options: {
|
|
routes: ['/'],
|
|
},
|
|
configurations: {
|
|
development: {
|
|
browserTarget: `${schema.project}:build:development`,
|
|
serverTarget: `${schema.project}:server:development`,
|
|
},
|
|
production: {
|
|
browserTarget: `${schema.project}:build:production`,
|
|
serverTarget: `${schema.project}:server:production`,
|
|
},
|
|
},
|
|
defaultConfiguration: 'production',
|
|
};
|
|
|
|
updateProjectConfiguration(tree, schema.project, projectConfig);
|
|
|
|
const nxJson = readNxJson(tree);
|
|
if (
|
|
nxJson.tasksRunnerOptions?.default &&
|
|
!nxJson.tasksRunnerOptions.default.options.cacheableOperations.includes(
|
|
'server'
|
|
)
|
|
) {
|
|
nxJson.tasksRunnerOptions.default.options.cacheableOperations = [
|
|
...nxJson.tasksRunnerOptions.default.options.cacheableOperations,
|
|
'server',
|
|
];
|
|
updateNxJson(tree, nxJson);
|
|
}
|
|
}
|