recipe file - EugeneN/cafe GitHub Wiki

recipe file

Recipe file is the core configuration file for your client-side application. For now cafe supports .json and .yaml formats for storing your configurations in recipe.

Here is the empty recipe file with it's main sections:

abstract: {api_version: 5}

modules:
    # modules list here ...

bundles:
   # bundles with modules list, referenced by module names

Modules

One of the main ideas of recipe file is to store all information about your application modules. Term "application module" doesn't mean file, this is one of structural blocks of your app, this may be some file, folder, or even module with it's own recipe.

For instance you have a single coffee file in your client side app folder - module1.coffee

  1. Object:
# ...
modules:
    - module1:                    # module name as key
        path: module1.coffee      # relative to your applications folder, where recipe is stored
        type: commonjs            # specify module type plainjs or commonjs (commonjs by default)
        deps: [module2, module3]  # "[list of modules names from which module depends]"
# ...
  1. List (less verbose):
modules:
    - module1: [module1.coffee, commonjs, [module2, module3]] # module_name :[path, type, deps]

this. also works:

modules:
    - module1: [module.coffee, commonjs] # module_name: [path, type]

or even this:

modules:
    - module1: [module.coffee, [module2, module3]] # module_name: [path, deps]
  1. Simple string (name):
modules:
    - module1: module1.coffee

The rest of metadata will be set to it's defaults values.

  • If no name is set then name = path without extension (if present)
  • If no path is set then path = name
  • Default type - commonjs
  • Default deps - []

Bundles

Bundles are your result processed with joined modules and wrapper for require function (if commonjs). To add some module to bundle you need to add module name to "modules" section of bundle

# ...
bundles:
    bundle1:                   # specify bundle name, this will result to bundle1.js file
        modules:           
            - module1   
            - module2   
            - module3
    bundle2:
        # --- bundle2 modules
# ...

here is the basic recipe configuration file:

abstract: {api_version: 5}

modules:
    - module1: modules/module1
    - jquery: [jquery.1.8.js, plainjs]
    - module2: [modules/module2, [jquery]]
    - my_coffee_module: [my_coffee_file.coffee]

bundles:
    bundle1:
        modules:
            - jquery
            - module1
            - module2
            - my_coffee_module

    bundle2:
        modules:
            - jquery
            - module1
            - my_coffee_module

TODO: realms, recipe extends section.