Next.js Codebase Analysis <> create-next-app <> index.ts explained — Part 1.15
In the previous article, you will find code explanation about how — typecript or — javascript arguments via CLI are handled.
In this article, you will see how the “— es-lint” or “? Would you like to use ESLint? › No / Yes” is configured
You will find the code below in next.js/create-next-app/index.ts
if (
// Check if there is an argument --es-lint passed
!process.argv.includes('--eslint') &&
!process.argv.includes('--no-eslint')
) {
// If not, check the user preferences
// cached/stored using Conf npm package
// Skip the prompt, if this package runs in CI
// ciInfo is from https://www.npmjs.com/package/ci-info
if (ciInfo.isCI) {
program.eslint = getPrefOrDefault('eslint')
} else {
// styledEslint, you could just directly use blue from picocolors
// in the message below
const styledEslint = blue('ESLint')
// This is the prompt configuration that shows you the EsList prompt
// in the CLI
const { eslint } = await prompts({
onState: onPromptState,
type: 'toggle',
name: 'eslint',
message: `Would you like to use ${styledEslint}?`,
initial: getPrefOrDefault('eslint'),
active: 'Yes',
inactive: 'No',
})
// set the program and preferneces keys
program.eslint = Boolean(eslint)
preferences.eslint = Boolean(eslint)
}
}
Conclusion
To summarise the code snippet used in this article, check if there is an argument passed via the CLI for ESLint, if not, show a prompt and take user’s input. There’s a side effect that makes the prompt skip if ciInfo.isCI is true. https://www.npmjs.com/package/ci-info can be used to detect if your node program is executed on CI server
If you have any questions, feel free to reach out to me at ramu.narasinga@gmail.com
Get free courses inspired by the best practices used in open source.
About me:
Hey, my name is Ramu Narasinga. I study large open-source projects and create content about their codebase architecture and best practices, sharing it through articles, videos.
I am open to work on interesting projects. Send me an email at ramu.narasinga@gmail.com
My Github — https://github.com/ramu-narasinga
My website — https://ramunarasinga.com
My Youtube channel — https://www.youtube.com/@ramu-narasinga
Learning platform — https://thinkthroo.com
Codebase Architecture — https://app.thinkthroo.com/architecture
Best practices — https://app.thinkthroo.com/best-practices
Production-grade projects — https://app.thinkthroo.com/production-grade-projects