sindresorhus / ora

Elegant terminal spinner
MIT License
9.08k stars 269 forks source link

Is it possible to run ora on Worker? #218

Open jon9090 opened 1 year ago

jon9090 commented 1 year ago

Is it possible to run ora on Worker?

Currently, it freezed:

Open this stackblitz example code Then in the stackblitz terminal run node index.js.

Now you can see that working is work as expected (because it's on the main thread), but loading is not because it on the worker thread.

index.js:

// run `node index.js` in the terminal
const { Worker } = require('node:worker_threads');
const path = require('path');
const ora = require('ora');

console.log(`Hello Node.js v${process.versions.node}!`);

new Worker(path.resolve(__dirname, './worker.js'));

ora('working...').start();

setTimeout(() => {}, 10 * 1000); //<-- prevent node to exit.

worker.js:

const ora = require('ora');

ora('loading...').start();
hhk-png commented 1 year ago

If the environment is not interactive, it will output the - ${this.text}\n in the terminal and not work normally. There is a section of code in the source that expresses this meaning.

if (!this.#isEnabled) {
    if (this.text) {
        this.#stream.write(`- ${this.text}\n`);
    }
    return this;
}

and #isEnabled property is equal to

this.#isEnabled = typeof this.#options.isEnabled === 'boolean' ? this.#options.isEnabled : **isInteractive**({stream: this.#stream})

The Worker environment is not interactive. The isInteractive() will return false.