clack
clack copied to clipboard
Spinner not showing on using silent exec
Environment
- OS: Windows
- Node Version: v18.18.0
- Package:
@clack/prompts
- Package Version: v0.7.0
Describe the bug No spinner is shown.
To Reproduce Run code on a real environment, shell is not working in stackblitz.
import { intro, outro, spinner } from '@clack/prompts';
import shell from "shelljs";
intro(`No spinner on shell.exec`);
const s = spinner();
s.start('Running install');
const command = await shell.exec('npm install', { silent: true });
const message = command.code === 0 ? "Installtion successful" : "Installation failed";
s.stop(message, command.code);
outro(`done`);
Steps to reproduce the behavior:
- Install shelljs `npm install shelljs
- run the script above
- no spinner is shown, the shell has just a empty line....
Expected behavior A spinner is shown.
Nodes normal exec is also not workin...
import { intro, outro, spinner } from '@clack/prompts';
import { execSync } from "node:child_process";
intro(`No spinner on execSync`);
const s = spinner();
s.start('Running install');
const command = execSync('npm install', { stdio: null });
const message = command.code === 0 ? "Installtion successful" : "Installation failed";
s.stop(message, command.code);
outro(`done`);
In both cases, you are using sync functions, which wouldn’t work. It will work if you turn them into async using util.promisify
import { intro, outro, spinner } from '@clack/prompts';
import { promisify } from "node:util";
import shell from "shelljs";
const exec = promisify(shell.exec);
intro(`No spinner on shell.exec`);
const s = spinner();
s.start('Running install');
const command = await exec('pnpm install', { silent: true }).catch(() => ({code: 1}));
const message = command.code === 0 ? "Installtion successful" : "Installation failed";
s.stop(message, command.code);
outro(`done`);