Skip to content

nut-project/nut

Folders and files

NameName
Last commit message
Last commit date

Latest commit

672e123 Â· Feb 29, 2020
Jun 19, 2019
Feb 29, 2020
Jun 19, 2019
Feb 29, 2020
Feb 29, 2020
Feb 29, 2020
Oct 14, 2019
Feb 29, 2020
Nov 13, 2019
Jul 9, 2019
Dec 3, 2019
Jul 19, 2019
Oct 28, 2019
Jun 12, 2019
Oct 14, 2019
Mar 19, 2019
Jul 2, 2019
Jun 18, 2019
Feb 22, 2020
Feb 22, 2020
Sep 18, 2019
Feb 29, 2020

Repository files navigation

nut logo

NUT Project

npm version dependencies node version build status npm downloads license

Features

  • Flexible layout mechanism
  • File-based router system
  • Customizable layouts and themes
  • Builtin markdown support
  • System events
  • Configuration management
  • Convenient hot reload during development
  • Plugin system

layout / theme HMR

hmr.gif

markdown theme HMR

markdown-theme-hmr.gif

System events

system-events.jpg

Route matching

route-match.jpg

Builtin layouts

default

ocean sakura
ocean sakura

saber

ocean sakura
ocean sakura

now

now

How to write a layout

...

How to write a plugin

A standard plugin looks like

export default {
  name: 'your-superb-plugin',
  // some special plugin need specify type,but you can ignore this in most cases
  type: 'login',
  apply( ctx = {}, options = {} ) {
    const { api, events } = ctx

    api.expose( 'method_name', () => {} )
    api.expose( 'prop', 'value' )

    events.on( 'system:before-startup', async ctx => {
      await api.axios() // do some request
      await events.pluginEmit( 'some-event', data ) // emit plugin event out
    } )
  }
}

You can expose some methods or props to application, or listen for system events, emit out some event in plugin

Using plugin

nut.config.js

module.exports = {
  plugins: {
    superb: {
      package: 'your-superb-plugin',
      enable: true,
    }
  }
}

superb is the name in current application

Use above plugin for example

// plugin exposed
ctx.use( 'superb', 'method_name' )
ctx.use( 'superb', 'prop' )

// plugin events
ctx.events.on( 'plugin:superb:some-event', async data => {} )

Get started

yarn global add @nut-project/cli
nut # develop locally
nut --prod # build for production