In my time of "silence" lately I have been working on getting project-butler to a final release.
activenode
/
project-butler
A cli project manager
CLI Project Manager
Installation
- Install package
npm -g install project-butlerand follow the helper to select your shell - Reload your shell
- DONE. You can use it now by calling
p
Usage
Usage as Videos
Adding and switching between projects
Removing aliases and removing projects
Usage as Documentation
$ p [options] [COMMAND] [args]
Commands
p | list available projects
p add | adds current directory to projects
p remove project-name | removes an alias (not the whole project)
p cd project-name | opens the given project (explicit version of `p script-name`)
p project-name | opens the given project (shortcut for `p cd`)
p script-name | if inside a project you can trigger a script with this
p --help | show help menu
Why would I choose p cd project over p project?
Well since project-butler is able to run your scripts the following could…
tldr
npm i project-butler -gwill install a terminal alias calledpwith which you can switch between projects withoutcdand without even writing out the full name. E.g. switch to your/bla/foo/todolistby simply callingp todo
It also reads the package.json if exists and the existing scripts and can run them if needed.
Why?
If you are like me you will probably have multiple projects laying around, probably in your home directory somewhere below ~/codestuff/... .
If I know exactly that I want to work on e.g. project-butler I dont want to cd into the directory but i just wanted to go like p but or even p b (whatever fits me best).
I wanted to make project-butler as universal as it can get such that in the future it can complement all of the other tools that I am having.
How it works
project-butler will create a hidden directory called .project-butler in your home directory and store the configuration.
In the configuration it will simply create a table with mappings from aliases -> project.
Imagine it like that:
| Aliases | Mapped path |
|---|---|
| todolist,todos | ~/my-stuff/angular/todolist |
| butler,foobar | ~/my-stuff/project-butler |
The above table would indiciate that calling p todos or even p dos (since there is a "next-best-match-search") would always bring you to the angular todolist directory.
Adding a project
p add [aliases...] if you are in the directory that you want to add
p add -d ./relative/path [aliases...] if you are outside of the directory
If you set the optional param aliases you can map the directory to whatever you want e.g.
p add my-alias and then you can open it with p my-alias.
Calling p add for the same directory multiple times will simply update it.
Removing an alias from a project
p remove alias - since aliases are unique you dont have to be in the directory nor do you have to provide the directory
Removing a complete project from the list
p remove alias -a will remove ALL aliases and therefore the mapping.
Alternative version: p project-name && p remove will jump to the project and then remove it.
Calling an npm script with project-butler
Make sure that you have added the project directory to project butler.
Now you can go to the project with p project-alias and simply call p script-name. It will read the package.json and try to run the script-name. If it does not find it it will instead try to find the fitting project with that name.
List all existing mappings
p list-all
What are YOU missing in project-butler?
I know that at this very point project-butler is just at the start of its path and it can go a good way to become an even better daily helper.
Is there anything you can imagine this tool should solve for you? Just comment below or even try a detailed explanation on the GitHub Issues and even potentially try to contribute if you want: https://github.com/activenode/project-butler/issues


Top comments (2)
That's pretty neat, perhaps I'll have a look. Right now I use autojump for a similar usecase: github.com/wting/autojump
autojumpis very cool as well. Slightly different functionality but I was thinking to merge them eventually in a sense ofpjetc. 🧐