Skip to content

Commit

Permalink
fix(js): node executor should always log error
Browse files Browse the repository at this point in the history
  • Loading branch information
mandarini committed Jun 16, 2023
1 parent 2b8d776 commit 7f7a815
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 7 deletions.
48 changes: 48 additions & 0 deletions e2e/js/src/js-node.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import {
cleanupProject,
newProject,
runCLI,
uniq,
updateFile,
updateProjectConfig,
} from '@nx/e2e/utils';

describe('js:node error handling', () => {
let scope: string;

beforeEach(() => {
scope = newProject();
});

afterEach(() => cleanupProject());

it('should log out the error', () => {
const esbuildLib = uniq('esbuildlib');

runCLI(
`generate @nx/js:lib ${esbuildLib} --bundler=esbuild --no-interactive`
);

updateFile(`libs/${esbuildLib}/src/index.ts`, () => {
return `
console.log('Hello from my library!');
throw new Error('This is an error');
`;
});

updateProjectConfig(esbuildLib, (config) => {
config.targets['run-node'] = {
executor: '@nx/js:node',
options: {
buildTarget: `${esbuildLib}:build`,
watch: false,
},
};
return config;
});

const output = runCLI(`run ${esbuildLib}:run-node`);
expect(output).toContain('Hello from my library!');
expect(output).toContain('This is an error');
}, 240_000);
});
2 changes: 1 addition & 1 deletion e2e/utils/command-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ export function runCLI(
const logs = execSync(
`${pm.runNxSilent} ${command} ${
opts.verbose ?? isVerboseE2ERun() ? ' --verbose' : ''
}`,
} 2>&1`,
{
cwd: opts.cwd || tmpProjPath(),
env: {
Expand Down
14 changes: 8 additions & 6 deletions packages/js/src/executors/node/node.impl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ import {
import { daemonClient } from 'nx/src/daemon/client/client';
import { randomUUID } from 'crypto';
import { join } from 'path';
import * as path from 'path';

import { InspectType, NodeExecutorOptions } from './schema';
import { createAsyncIterable } from '@nx/devkit/src/utils/async-iterable';
import { calculateProjectDependencies } from '../../utils/buildable-libs-utils';
import { killTree } from './lib/kill-tree';
import { fileExists } from 'nx/src/utils/fileutils';

interface ActiveTask {
id: string;
Expand Down Expand Up @@ -71,12 +73,11 @@ export async function* nodeExecutor(

// Re-map buildable workspace projects to their output directory.
const mappings = calculateResolveMappings(context, options);
const fileToRun = join(
context.root,
buildOptions.outputPath,
buildOptions.outputFileName ?? 'main.js'
);

const outputFileName =
buildOptions.outputFileName ?? `${path.parse(buildOptions.main).name}.js`;

const fileToRun = join(context.root, buildOptions.outputPath, outputFileName);
const tasks: ActiveTask[] = [];
let currentTask: ActiveTask = null;

Expand Down Expand Up @@ -168,7 +169,8 @@ export async function* nodeExecutor(
task.childProcess.stderr.on('data', (data) => {
// Don't log out error if task is killed and new one has started.
// This could happen if a new build is triggered while new process is starting, since the operation is not atomic.
if (options.watch && !task.killed) {
// Log the error in normal mode
if (!options.watch || !task.killed) {
logger.error(data.toString());
}
});
Expand Down

0 comments on commit 7f7a815

Please sign in to comment.