ffc

0.0.1 • Public • Published

Fast File CLI

CLI tool to generate new files based on teams best practices.

Getting Started

Install ffc:

> npm install -g ffc

Usage

Command Alias Description Default Example
generate g It generates a file, <component> is what you define in your config file n/a ffc generate <component> src/components/thisIsAComponent
flat f Flat doesn't create container folder false ffc g <component> src/components/thisIsAComponent --flat
help n/a It shows all the available commands n/a ffc generate --help
help n/a It shows usage help n/a ffc --help

Setup

First, create your schematic folder in your project's root folder. Inside that folder, create your component file with it's files.

Example:

package.json
src/
schematic/
    component/
        {name}.js
        ...
...

Inside schematic/component/ you can add any number of files with any file extension.

Example:

package.json
src/
schematic/
    component/
        {name}.js
        {name}.scss
        {name}.desktop.scss
        {name}.tablet.scss
        {name}.mobile.scss
...

Now, you need to write your ffcconfig.json in your project's root folder.

ffcconfig.json

This is a required config file that contains:

{
    "commands": [
        {
            "command": ["component", "c"],
            "schematic": "schematic/component",
            "folderStyle": "camel"
        },
        ...
    ]
}

Folder/File styles

Name Style Example
Lower Case thisisaexample
Camel Case camel thisIsAExample
Pascal Case pascal ThisIsAExample
Snake Case snake this_is_a_example
Kebab Case kebab this-is-a-example

Templates

ffc uses a very simple template system that works on file name and file content. The only available variable atm is {name:<style>}.

All the available options are: {name}, {name:camel}, {name:pascal}, {name:snake} and {name:kebab}.

So, if we run: ffc generate component src/components/thisIsAComponent

  • {name}.js will become thisisacomponent.js
  • {name:camel}.js will become thisIsAComponent.js
  • {name:pascal}.js will become ThisIsAComponent.js
  • {name:snake}.js will become this_is_a_component.js
  • {name:kebab}.js will become this-is-a-component.js

This also works for file contents, React component example:

// {name:pascal}.js
import React from 'react';
 
import './{name:snake}.scss';
 
class {name:pascal} extends React.Component {
    render() {
        return (
            <div className="{name:pascal}">
                <span>{name} works</span>
            </div>
        );
    }
}
 
export default {name:pascal};

This will become:

// ThisIsAComponent.js
import React from 'react';
 
import './this_is_a_component.scss';
 
class ThisIsAComponent extends React.Component {
    render() {
        return (
            <div className="ThisIsAComponent">
                <span>thisisacomponent works</span>
            </div>
        );
    }
}
 
export default ThisIsAComponent;

How to Contribute

All pull requests are welcome

Package Sidebar

Install

npm i ffc

Weekly Downloads

0

Version

0.0.1

License

MIT

Unpacked Size

11.3 kB

Total Files

7

Last publish

Collaborators

  • ealvarez