[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.
相关文章
- JS+CSS3 360度全景图插件 - Watch3D.js
- JS框架_(Esign.js)仿信用卡电子签名特效
- JS框架_(Bootstrap.js)实现简单的轮播图
- baguetteBox.js响应式画廊插件(纯JS)
- js 解决原型问题的方案 : 构造器和原型的组合
- 键盘事件与JS Filter
- ECHarts.js
- Node.js文件操作一
- 2015.10.11(js判断鼠标进入容器的方向)
- [React Typescript 2022] Refactor a React Component using TypeScript
- [WASM] Run WebAssembly in Node.js using the node-loader
- js-ECMAScript-3:运算符和流程控制
- [Typescript] @typescript-eslint/unbound-method
- [Typescript] Create Type From Any Given Data in TypeScript
- [CLI] Create a Single-Command Node.js CLI with Oclif, TypeScript and Yarn Workspaces
- [TypeScript] Type check JavaScript files using JSDoc and Typescript 2.5
- [Typescript] Sorting arrays in TypeScript
- [TypeScript] Typescript Interfaces vs Aliases Union & Intersection Types
- [Whole Web, Node.js, PM2] Restarting your node.js app on code change using pm2
- [Node.js] Using npm link to use node modules that are "in progress"
- Atitit 前端测试最简化内嵌web服务器 php 与node.js 目录 1.1. php内置Web Server1 1.2. Node的2 Node的比较麻烦些。。Php更加简单
- 使用 Node.js Stream API 减少服务器端内存消耗的一个具体例子
- Vue2.js:TypeScript 支持Prop属性类型标注
- JS:crypto-js模块实现数据加密解密
- babel配置项目目录支持转换es6语法,引入非项目目录js后,引入Js转换无效
- i18n 和 基于js的网页多语言框架 jquery.i18n的介绍
- 前端必备技能知识:JS导出Blob流文件为Excel表格、Vue.js使用Blob的方式实现excel表格的下载(流文件下载)