Is there a version of this for Typescript?
Answered
Artois Hound posted this in #help-forum
Answered by Artois Hound
I will leave the code here in case anyone ever needs it:
const { exec } = require('child_process');
const chalk = require('chalk');
// Start "next dev" command
const nextDevProcess = exec('next dev');
// Display stdout of "next dev" command
nextDevProcess.stdout.on('data', data => {
const trimmedData = data.toString().trim();
if (trimmedData !== '') {
let coloredData = trimmedData;
if (trimmedData.includes('info')) {
coloredData = chalk.blue(trimmedData);
} else if (trimmedData.includes('event')) {
coloredData = chalk.magenta(trimmedData);
} else if (trimmedData.includes('ready')) {
coloredData = chalk.green(trimmedData);
} else if (trimmedData.includes('wait')) {
coloredData = chalk.blue(trimmedData);
}
console.log(coloredData);
}
});
// Display stderr of "next dev" command
nextDevProcess.stderr.on('data', data => {
const trimmedData = data.toString().trim();
if (trimmedData !== '') {
console.error(chalk.red(trimmedData));
}
});
// Wait for 5 seconds
setTimeout(() => {
// Run "node start.js" command
exec('node start.js', (error, stdout, stderr) => {
if (error) {
console.error(`Error running "node start.js": ${error}`);
return;
}
const trimmedStdout = stdout.trim();
if (trimmedStdout !== '') {
console.log(trimmedStdout);
}
const trimmedStderr = stderr.trim();
if (trimmedStderr !== '') {
console.error(chalk.red(trimmedStderr));
}
});
}, 5000);28 Replies
European sprat
nodejs is javascript
and that file doesn't go through a build process which typescript needs
Artois HoundOP
Is there a way to call a function upon server bootup without setting up a custom server?
@Artois Hound Is there a way to call a function upon server bootup without setting up a custom server?
node prestart.js && next start?
ts-node prestart.ts && next start, if you want to use ts
@joulev ts-node prestart.ts && next start, if you want to use ts
Artois HoundOP
> ts-node prestart.ts && next dev
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for C:\Users\helloUser\OneDrive\Desktop\W\P\web\website\prestart.ts
at new NodeError (node:internal/errors:399:5)
at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:99:9)
at defaultGetFormat (node:internal/modules/esm/get_format:139:38)
at defaultLoad (node:internal/modules/esm/load:83:20)
at DefaultModuleLoader.load (node:internal/modules/esm/loader:319:26)
at DefaultModuleLoader.moduleProvider (node:internal/modules/esm/loader:194:22)
at new ModuleJob (node:internal/modules/esm/module_job:63:26)
at DefaultModuleLoader.#createModuleJob (node:internal/modules/esm/loader:218:17)
at DefaultModuleLoader.getJobFromResolveResult (node:internal/modules/esm/loader:171:34)
at DefaultModuleLoader.getModuleJob (node:internal/modules/esm/loader:156:17) {
code: 'ERR_UNKNOWN_FILE_EXTENSION'
}it's not part of nextjs
what i meant is, you can change the build scripts to include additional commands before or after the build, run anything
you don't have to keep
"start" at "next start" or "dev" at "next dev"what to run entirely depends on you, you can use
ts-node but you can also simply use a bash script or any programming languages in existencenextjs doesn't enforce anything on that aspect
Artois HoundOP
Yeah, I am trying another method that works, however, it has it's own downfalls.
const { exec } = require('child_process');
// Start "next dev" command
const nextDevProcess = exec('next dev', (error, stdout, stderr) => {
if (error) {
console.error(`Error starting "next dev": ${error}`);
return;
}
console.log(stdout);
console.error(stderr);
});
// Wait for 5 seconds
setTimeout(() => {
// Run "node start.js" command
exec('node start.js', (error, stdout, stderr) => {
if (error) {
console.error(`Error running "node prestart.js": ${error}`);
return;
}
console.log(stdout);
console.error(stderr);
});
}, 5000);This code works almost perfectly.
Only problem is, it does not log this:
everything else seems to work normally, I just don't get these logs
Console logs I set up myself work, but I do not know if there's anything else that fails or just this
Nevermind, I managed to partially fix it, now it also logs some thing it isn't meant to log 🤣
nvm I got it to work 🤣
Without the colors, but still, works
We can call this a success:
Artois HoundOP
I will leave the code here in case anyone ever needs it:
const { exec } = require('child_process');
const chalk = require('chalk');
// Start "next dev" command
const nextDevProcess = exec('next dev');
// Display stdout of "next dev" command
nextDevProcess.stdout.on('data', data => {
const trimmedData = data.toString().trim();
if (trimmedData !== '') {
let coloredData = trimmedData;
if (trimmedData.includes('info')) {
coloredData = chalk.blue(trimmedData);
} else if (trimmedData.includes('event')) {
coloredData = chalk.magenta(trimmedData);
} else if (trimmedData.includes('ready')) {
coloredData = chalk.green(trimmedData);
} else if (trimmedData.includes('wait')) {
coloredData = chalk.blue(trimmedData);
}
console.log(coloredData);
}
});
// Display stderr of "next dev" command
nextDevProcess.stderr.on('data', data => {
const trimmedData = data.toString().trim();
if (trimmedData !== '') {
console.error(chalk.red(trimmedData));
}
});
// Wait for 5 seconds
setTimeout(() => {
// Run "node start.js" command
exec('node start.js', (error, stdout, stderr) => {
if (error) {
console.error(`Error running "node start.js": ${error}`);
return;
}
const trimmedStdout = stdout.trim();
if (trimmedStdout !== '') {
console.log(trimmedStdout);
}
const trimmedStderr = stderr.trim();
if (trimmedStderr !== '') {
console.error(chalk.red(trimmedStderr));
}
});
}, 5000);Answer
Artois HoundOP
Just tasted same method with production, works perfectly, so enjoy boys!
Niceee, congrats!
