Package Exports
- @nut-project/runtime-pages
- @nut-project/runtime-pages/package
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@nut-project/runtime-pages) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
NUT Project
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
markdown theme HMR
System events
Route matching
Builtin layouts
default
| ocean | sakura |
|---|---|
![]() |
![]() |
saber
| ocean | sakura |
|---|---|
![]() |
![]() |
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/clinut # develop locally
nut --prod # build for production


