npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

fabrique

v0.2.0

Published

CLI to build a library

Downloads

14

Readme

npm (scoped) npm NPM npm type definitions

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
  • [name]: the library name

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.ts
  • my-component-abc
    • my-component-abc.ts

We get:

  • some-component
  • my-new-component
    • my-new-component.ts
  • my-new-component-abc
    • my-new-component-abc.ts

And with this file content:

class MyComponent {}

// my-component
const MY_COMPONENT = null;
function my_component(myComponent: MyComponent) {}

We get:

class MyNewComponent {}

// my-new-component
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