@deskeen/web-builder

0.2.0 • Public • Published

Node.JS Website Builder

This tool allows you to build a website by performing a certain number of tasks called modules.

Usage

const builder = require('@deskeen/web-builder')

await builder.build({
  source: [
    // Either a file or a directory
  ],
  modules: [
    // Either:
    // A module name
    'module-name',
    // OR
    // An array containing the module name and the module options
    ['module-name-with-options', {  }],
    // OR
    // A custom function (See "Create your own modules" chapter)
    moduleFunction,
  ],
  log: false,
})

The build function accepts the following properties:

  • source: a list of files or directories that will be passed to the modules.
  • modules: a list of modules. A module can be a module name, an array containing a module name and the module options, or a function. If you add a module name, make sure to add it to to the package.json file and install it beforehand. If you want a function, please read the Create your own modules chapter.
  • log: Whether logs are shown.

A writeFile(filepath, data) function is also available.

Available Modules

Create your own modules

You can create your own modules and perform custom tasks by passing functions instead of package names.

function (sourceMap, opt, lib)

Three parameters will be passed to your module/function:

  • sourceMap: A Map object contaning the file path (i.e. /path/filename.xyz) as key and the content of the file as value provided by the user.
  • opt: An object containing the options also provided by the user.
  • lib: An object containing useful functions provided by the engine.

Three functions are included in the lib object:

  • getTag(tagName, tagValue): Returns a tag name, i.e. {{tagName:tagValue}}.
  • getTagList(tagName, text): Returns the list of tags included in a text (typically the file content).
  • findAsset(filename, directoryList): Find a specific filename in a list of directories.
  • log(text): Log text (if the user turned it on).

Example of module

Imagine your project contains JSON files that you would like to minify. You can create a module to do that:

const minifyJson = (fileMap, opt, { log }) => {
  // Loop through all the files provided by the user
  for (const [path, content] of fileMap.entries()) {

    // If file is a JSON file...
    if (path.endsWith('.json')) {
      // ...Replace the content of the file with a minified version
      fileMap.set(path, JSON.stringify(JSON.parse(content)))

      // Use the log function provided by the engine to log useful informations
      log(`Minify JSON file: ${filepath}`)
    }
  }
}

You JSON-minifier module can then be added to the list of modules:

const builder = require('@deskeen/web-builder')

await builder.build({
  source: [
    '/www/html/index.html',
    '/www/data/data.json',
  ],
  modules: [
    minifyJson
  ]
})

For more concrete examples, you can have a look at the source files of the existing modules.

Contact

You can reach me at {my_firstname}@{my_name}.fr

Licence

MIT Licence - Copyright (c) Morgan Schmiedt

Readme

Keywords

Package Sidebar

Install

npm i @deskeen/web-builder

Weekly Downloads

3

Version

0.2.0

License

MIT

Unpacked Size

17.7 kB

Total Files

10

Last publish

Collaborators

  • deskeen