Emulsify CLI Usage

This project is a command line interface for working with Emulsify. It has a few primary responsibilities:

  • Make initializing Emulsify projects very simple.
  • Allow developers to select an Emulsify system (such as Compound).
  • Give developers the ability to pull in components from the system they're using, when/if they need them.

Projects, Systems and Variants

You will see the terms "Projects", "Systems" and "Variants" used throughout this documentation, so it's important for you to understand what they mean.

  • Project: an implementation of an Emulsify starter, such as emulsify-drupal.
  • System: a design system that defines components, and assets. Emulsify projects opt into using systems using cli commands. Once a system has been selected for a project, the system will mandate how components are organized and how required components/assets are installed. It also gives developers the ability to find and install non-required components.
  • Variant: a system might have a Drupal variant, a WordPress variant, and a React variant. The system is the same (imagine Material-UI is a system), but each variant may define different types of components, or have different organization patterns that are compatible with different platforms. Systems may have as many variants as they want.

Using the CLI

Init

The cli exposes an init command that allows developers to easily create an Emulsify project

When the init command is run, it will attempt to detect the platform you're using, and use that to choose a starter (such as emulsify-drupal). However, you can use the command options to specify any platform, starter, and starter version/branch/tag. If the cli cannot determine the platform you're using, it will instruct you to provide those details yourself.

emulsify init --help
Usage: emulsify init [options] <name> [path]

Initialize an Emulsify project

Arguments:
  name                                  Name of the Emulsify project you are initializing. This should be a proper name, such as "Carmen Sandiego".
  path                                  Path to the folder in which you would like to to create your Emulsify project. For example, "./themes" will
                                        result in the Emulsify project being placed in ./themes/{name}

Options:
  -m --machineName <machineName>        Machine-friendly name of the project you are initializing. If not provided, this will be automatically
                                        generated.
  -s --starter <repository>             Git repository of the Emulsify starter you would like to use, such as the Emulsify Drupal theme:
                                        https://github.com/emulsify-ds/emulsify-drupal.git
  -c --checkout <commit/branch/tag>     Commit, branch or tag of the base repository that should be checked out
  -p --platform <drupal/wordpress/etc>  Name of the platform Emulsify is being within. In some cases, Emulsify is able to automatically detect this. If
                                        it is not, Emulsify will prompt you to specify.
  -h, --help                            display help for command

Example usage:

cd ~/projects/my-drupal-codebase
emulsify init "Theme Name"

# If you are not relying on the cli to detect the platform, and use a starter:
emulsify init "Theme Name" ./web/themes/custom/theme-name --starter https://github.com/emulsify-ds/emulsify-drupal.git --checkout 2.x --platform drupal

System

Once you have initialized a project, you can use system commands available within the cli to list the out-of-the-box systems, and install a system into your current project.

emulsify system --help
Usage: emulsify system [options] [command]

Parent command that contains sub-commands pertaining to systems

Options:
  -h, --help                display help for command

Commands:
  list|ls                   Lists all of the available systems that Emulsify supports out-of-the-box
  install [options] [name]  Install a system within an Emulsify project. You must specify either the name of an out-of-the-box system (such as
                            compound), or a link to a git repository containing the system you want to install
  help [command]            display help for command

The emulsify system list|ls command lists all of the out-of-the-box systems Emulsify supports at the moment.

Example usage:

emulsify system list
compound - https://github.com/emulsify-ds/compound.git

The emulsify system install command, when run within an Emulsify project, will install a system within the given project. You can pass the name of an out-of-the-box system, like compound, or you can pass a repository, and commit/branch/tag of any system you'd like to use.

emulsify system install --help
Usage: emulsify system install [options] [name]

Install a system within an Emulsify project. You must specify either the name of an out-of-the-box system (such as compound), or a link to a git repository containing the system you want to install

Arguments:
  name                               Name of the out-of-the-box system you would like to install

Options:
  -r --repository <repository>       Git repository containing the system you would like to install
  -c --checkout <commit/branch/tag>  Commit, branch or tag of the base repository that should be checked out. MUST be provided if you are passing along
                                     a repository (-r or --repository). Tags or commit hashes are strongly preferable, because you want to ensure that
                                     you are using the same version of the system every time you install components, etc
  -a --all                           Use this to install all available components within the specified system. Without this flag, only the required system components will be installed.
  -h, --help                         display help for command

Example usage:

cd ~/projects/my-drupal-codebase/web/themes/custom/my-theme
emulsify system install compound
 > Successfully installed the compound system using the drupal variant.


# If you are pasing in your own repo/checkout
emulsify system install --repository https://github.com/your-org/your-custom-system.git --checkout 3.x

Components

In your project, once you have selected a system, you may use the components commands within the cli to find, and install components that are available within your system.

emulsify component --help
Usage: emulsify component [options] [command]

Parent command that contains sub-commands pertaining to components

Options:
  -h, --help        display help for command

Commands:
  list|ls           Lists all of the components that are available for installation within your project based on the system and variant you selected
  install|i [name] [options] Install a component from within the current project's system and variant
  help [command]    display help for command

Listing components

The emulsify component list|ls will return a list of components available within the system you selected for your project.

Example usage:

cd ~/projects/my-drupal-codebase/web/themes/custom/my-theme
emulsify component list

base -> 01-colors
base -> 02-motion
base -> 03-site
atoms -> buttons
atoms -> forms
atoms -> images
atoms -> links
atoms -> lists
atoms -> tables
atoms -> text
atoms -> video
molecules -> card
molecules -> cta
molecules -> menus
molecules -> pager
molecules -> status
molecules -> tabs
organisms -> grid
organisms -> site
templates -> placeholder
pages -> content-types
pages -> landing-pages

Installing components

Once you've found a component you want to install, you can use the emulsify component install command to fetch it into your project.

Example usage:

cd ~/projects/my-drupal-codebase/web/themes/custom/my-theme
emulsify component install card
 > Success! The card component has been added to your project.

Force installing components

If you attempt to install a component that already exists within your project, you the installation process will throw an error. However, if you wish to overwrite the existing component, pass the --force flag.

Example usage:

emulsify component install card
 > Error: The component "card" already exists, and force was not passed (--force).

emulsify component install card --force
 > Success! The card component has been added to your project.

Installing all available components

If you would like to simply install all components available within the system you've selected, use the --all flag.

Example usage:

emulsify component install --all
 > Success! The 01-colors component has been added to your project.
 > ...

That's pretty much it. Have fun, and please feel free to open issues if you discover a bug, or have an improvement to suggest!