Arrow keys: ← previous · → next 4 of 35
@nodedk/cli
0.11.4 stable

cli#

Build NodeDK assets, run migrations, and generate sitemaps.

Install#

npm i -g @nodedk/cli

Usage#

Run commands from the application root:

ndk build
ndk migrate
ndk sitemap
ndk help

Build#

ndk build recreates dist, runs an optional deploy/build.js function, then copies app/assets into dist. It concatenates the files listed in app/config/bundle.js in order and minifies JavaScript and CSS with esbuild. JavaScript includes a linked source map.

// app/config/bundle.js
module.exports = {
  css: ['/css/base.css', '/css/theme.css'],
  js: ['/js/browser.js', '/js/base.js']
}

Bundle paths are relative to app/assets. Use browser scripts here; the build does not resolve require() or import dependencies. The bundle configuration may also export an async function returning this object.

Copy packaged browser assets into the application before building:

mkdir -p app/assets/js
cp node_modules/@nodedk/browser/build/browser.js app/assets/js/browser.js
ndk build

Use state.script(['/bundle.js']) and state.style(['/bundle.css']) in a NodeDK server layout. Development mode loads the individual configured files; production references the built bundles. Serve dist through your production web server or use static: 'dist' in the NodeDK server configuration.

Migrate#

ndk migrate loads files from migrations in filename order and awaits each exported function. It runs them again on every invocation, so migrations should handle existing data.

// migrations/001-cache-index.js
var { client } = require('@nodedk/mongodb')

module.exports = async function () {
  var connection = client(process.env.MONGODB_URL)
  try {
    await connection.connect()
    await connection.db('app').collection('cache').createIndex({ expires: 1 })
  } finally {
    await connection.close()
  }
}

Sitemap#

ndk sitemap reads deploy/sitemap.js and writes dist/sitemap.xml. outpath changes the output directory, relative to the application root. The file may export an object or an async function returning one.

// deploy/sitemap.js
module.exports = {
  hostname: 'https://example.com',
  outpath: 'dist',
  urls: ['/', '/about', { url: '/contact', priority: 0.5 }]
}

See sitemap for URL options.

JavaScript API#

Install locally to call commands from application code:

npm i @nodedk/cli
var cli = require('@nodedk/cli')

async function main() {
  var options = { cwd: '/path/to/app' }
  await cli.build(options)
  await cli.migrate(options)
  await cli.sitemap(options)
  console.log(cli.help())
}

main().catch(console.error)

build(options = {}), migrate(options = {}), and sitemap(options = {}) return Promises with no result value. Their only option is cwd, which defaults to process.cwd(). help() returns the command help string.

Created by Vidar Eldøy