Package Exports
- tarkine
- tarkine/src/browser.min.js
- tarkine/src/index.js
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 (tarkine) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Tarkine - A lightweight and high-performance template engine for Node.js, designed for speed and simplicity.
Installation
npm install tarkine
Usage
const Tarkine = require('tarkine');
const output = Tarkine.renderFile("./template.tark", {
username: "John Doe",
html: "<span>Some HTML</span>",
status: true
});
console.log(output);
Usage in expressjs:
const Tarkine = require("tarkine") // import
const express = require("express")
const app = express()
app.set("view engine", Tarkine.ext) // .tark files
app.engine(Tarkine.ext, Tarkine.renderFile)
app.get("/", (req, res) => {
res.render("index", {
username: "tarkine"
})
})
app.listen(3000)
Usage in hono:
import { Hono } from "hono"
import { honoRenderer } from "tarkine"
const app = new Hono()
app.use(honoRenderer({
views: "./views"
}))
app.get("/", (c) => {
c.render("index", {
username: "tarkine"
})
})
Syntax
- Comments
{{# This is a comment }}
- Expression
{{ variable }} // Escaped output
{{- variable }} // Unescaped output
- Conditionals
<!-- condition -->
{{:if status }}
// content
{{:else if status == 0 }}
// content
{{:else}}
// content
{{/if}}
- Loops
<!-- loops -->
{{:for value, index in array }}
// content
{{/for}}
{{:for value, key in object }}
// content
{{/for}}
- Includes
{{- include("./header", { links: ["home", "code", "about"] }) }}
- Code Execution
{{~
// JavaScript code here
}}
- Conditionals Void Attributes
<div>
<button disabled="isLoggedIn">Login</button>
<button disabled="isLoggedIn === true">Login</button>
</div>
- Macros
{{:macro button(text, ...classes) }}
<button class="{{ classes.join(' ') }}">{{ text }}</button>
{{/macro}}
{{- button("Login", "btn", "is-primary") }}
Layouts (Extend & Slot)
- Define layout:
<!-- layout.tark --> <!DOCTYPE html> <html> <head>{{- head }}</head> <body>{{- body }}</body> </html>
- Use layout:
{{:extends "./layout"}} {{:slot "head"}} <title>Page Title</title> {{/slot}} {{:slot "body"}} <main><h1>Hello Layout</h1></main> {{/slot}} {{/extends}}
Add Custom Data
- Global data can be registered and used across all templates:
const Tarkine = require('tarkine')
Tarkine.store.set("default", {
siteName: 'My Website',
description: "...."
})
- Access in template:
<title>{{ $.default.siteName }}</title>
Browser support
<script src="https://cdn.jsdelivr.net/npm/tarkine@latest/src/browser.min.js"></script>
<script>
const output = Tarkine.render("<h1>{{ name }}</h1>", { name: "Tarkine" })
console.log(output)
</script>