[CLI] Create a Single-Command Node.js CLI with Oclif, TypeScript and Yarn Workspaces
The fastest way to create a robust, cross-platform compatible Node.js CLI (optionally typed with TypeScript) is by running npx oclif single mycli
. Here we explain what this means and how and why to integrate this with Yarn Workspaces for an ideal developer experience.
Scaffold a CLI application with Oclif:
npx oclif single mycli
Once you're done installing and scaffolding out, you'll have a new folder called mycli
, which contains your new CLI.
There is a bin folder, you can run CLI using:
./bin/run
But here we choose to use Yarn worksapce to run the cli, for example, running cli will do:
yarn mycli
Setup Yarn worksapce
1. First create a packages folder, and put mycli folder into it.
I'm going to use my finder window to move mycli into the packages. This is to prevent VS Code from renaming everything inside of it.
2. On the same level of packages folder, we create a package.json file:
{ "private": true, "workspaces": [ "packages/*" ] }
3. On the root level, Run:
yarn
This is correctly link your workspace, without running this command first, it will have error.
4. Running the CLI:
yarn mycli
It just output the default message 'hello world'.
Use mycli in other projects
For example we have another project inside or workspace called 'example':
We need to create a example/package.json file:
{ "name": "example", "version": "1.0.0", "main": "index.js", "license": "MIT" }
Then update the root level package.json file to include example project:
{ "private": true, "workspaces": [ "packages/*", "example" ] }
Remember to run 'yarn' in the root level
yarn workspace example
This will make sure 'example' project is correctly added into workspace.
Running mycli in example
Now we want use 'mycli' for example project as well.
What we can do is in the root level, we run:
yarn workspace example mycli
It will run mycli inside example context.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2019-03-01 [Compose] 21. Apply Natural Transformations in everyday work
2019-03-01 [Compose] 20. Principled type conversions with Natural Transformations
2019-03-01 [Compose] 19. Leapfrogging types with Traversable
2017-03-01 [Ramda] Change Object Properties with Ramda Lenses
2017-03-01 [Django] Start a new django project
2017-03-01 [Django] Get started with Django -- Install python and virtualenv
2016-03-01 [Immutable.js] Working with Subsets of an Immutable.js Map()