Fabrique
fabrique
is a cli to create and build libraries,
letting the user focus on the functionalities of its library, instead of the build process.
With fabrique
you'll be able to:
- create rapidly a library with all the tools and scripts to:
- build and publish your library
- write tests for it
- format your code
- and debug it
- upgrade any Fabrique project to get the last functionalities in one command line.
fabrique
is not intended to provide ci scripts and pipelines to automate the processes.
Instead, it gives a uniform and simple entry point for everyone, to publish rapidly our own libraries,
on which we may add automation, scripts, and complexity.
fabrique
is the French word for "made/factory"
Motivation
When we develop javascript/typescript libraries, we frequently create new repositories,
and maintains the scripts to build, test, and debug them.
This tends to become rapidly cumbersome, especially when their number grows.
We may choose to opt in for a monorepo, and I'll tell you: yes, in many cases, this is the optimal solution.
However, in many other cases, one library per-repo makes sense, and this is where fabrique
comes in.
Another goal is to focus on simplicity: for new incomers in javascript,
learning all the tools and build processes is complicated.
You want to write your library, but you have to learn vite
, jest
, how to build and publish a lib,
install prettier
, etc. With fabrique
all comes in pre-configured.
📝 Documentation
Requirements
The library requires Node.js 22+
and yarn 4+
.
Installation
We recommend to use npx:
npx fabrique CMD
But, you may prefer to install globally fabrique
:
npm install -g fabrique
And run a command with:
fabrique CMD
List of commands
create
npx fabrique upgrade lib [name]
example
npx fabrique create @my-company/my-library
action
This command creates a new library with the name [name]
inside the folder ./[name]
(in our example: ./@my-company/my-library
).
You'll be prompted for a description, author and git url.
INFO: run the command where you want to create your project.
options
upgrade
npx fabrique upgrade
action
This command updates an existing fabrique
project: it updates the build files, the scripts, etc.
It tries to be non-destructive.
INFO: run the command inside the fabrique
project.
options
--force
: forces an upgrade even if the lib is not a fabrique
project or if the version is identical. Use with caution.
refactor
npx fabrique refactor [from] [to]
example
npx fabrique refactor my-component my-new-component
Refactors all files and directories containing my-component
as name into my-new-component
(recursively).
And all text content my-component
(or derived cases) into my-new-component
(keeping the same case).
If we run it with the following files:
- some-component
- my-component
- my-component-abc
We get:
- some-component
- my-new-component
- my-new-component-abc
And with this file content:
class MyComponent {}
const MY_COMPONENT = null;
function my_component(myComponent: MyComponent) {}
We get:
class MyNewComponent {}
const MY_NEW_COMPONENT = null;
function my_new_component(myNewComponent: MyNewComponent) {}
action
This command refactors files and directories recursively from the cwd
(by default, the current directory in which the script is executed).
It preserves the case of the names (ex: dash-case
, or cameCase
).
INFO: run the command inside the folder that you want to refactor.
options
[from]
: the "source" text to refactor. Must be dash-case
.[to]
: the "destination" text to refactor. Must be dash-case
.--dry
(default: false): runs without modifying the files. This is useful to check if your refactoring is safe or not.--cwd
(default: current folder): specifies the directory to start from.
verdaccio
npx fabrique verdaccio
Installs and lauches verdaccio. This is useful to debug interdependent libraries.
Let's say we have:
- a library
my-lib-a
- a library
my-lib-b
with my-lib-a
as dependency
If we're working on my-lib-a
, and want to test if it works on my-lib-b
, we'll publish a dev
version of my-lib-a
on a local verdaccio
.
And consume this dev version on my-lib-b
.
We choose verdaccio instead of npm link
because versions and dev packages are unique with a package registry.
Thus, we may have my-lib-b
consuming my-lib-a-dev.0
and my-lib-c
consuming my-lib-a-dev.1
, which is not possible with npm link
.
version
npx fabrique --version
# or
npx fabrique -v
Returns the current fabrique
version.
help
npx fabrique --help
# or
npx fabrique -h
You may get help on individual commands:
npx fabrique create -h