Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Yet another static site generator in NodeJS focussed on being fast and simple. Mangony fulfills just one task: It takes templates (like handlebars or jsx) and compiles them to an output directory.
Yet another static site generator - fast, simple, powerful and pluggable.
Mangony fulfills just one task: It takes files, saves them in cache, use templates and compiles them to an output directory.
Install Mangony with
npm install mangony --save-dev
For the installation of the Grunt plugin, see grunt-mangony.
Just create a new instance of Mangony:
import Mangony from 'mangony';
const app = new Mangony();
Then render your mangony instance:
app.render();
To render files with a template engine you need to add a plugin. There are some engines provided to you, but you can easily create your own if you want to. Let's go with JSX for now:
import Mangony, { jsxTemplaterPlugin } from 'mangony';
const app = new Mangony();
app.render()
.then(() => app.use(jsxTemplaterPlugin);
When using the default options your files get compiled. But you can also integrate the development server.
dev.js
Let`s say we want to develop a new static page with the dev server in place.
import Mangony, { jsxTemplaterPlugin, serverPlugin } from 'mangony';
const app = new Mangony({
cwd: `src`,
dest: `dist/`,
watch: true,
types: {
data: {
dir: 'data',
files: [
'**/*.json',
'**/*.hjson'
]
},
partials: {
dir: 'partials',
files: [
'**/*.hbs'
]
},
pages: {
dir: 'pages',
files: [
'**/*.tsx'
]
},
layouts: {
dir: 'layouts',
files: [
'**/*.hbs'
]
}
}
});
app.render()
.then(() => app.use(jsxTemplaterPlugin, {
compileStaticFiles: false
})
.then(() => app.use(serverPlugin, {
bsEnabled: true,
injectScript: true,
start: true,
port: 3000,
usePort: true,
useAssetsDir: false,
}));
When using the devServer
options all routes get registered.
Now you can open your browser at localhost:3000
and navigate to the page you want to change.
The url is the path to your page without a file extension (i.e. /index
). If you want to use the file extension as well, just enable it via options.
prod.js
Let`s say we want to build our static page.
import Mangony, { jsxTemplaterPlugin } from 'mangony';
const app = new Mangony({
cwd: `src`,
dest: `dist/`
types: {
data: {
dir: 'data',
files: [
'**/*.json',
'**/*.hjson'
]
},
partials: {
dir: 'partials',
files: [
'**/*.hbs'
]
},
pages: {
dir: 'pages',
files: [
'**/*.hbs',
'**/*.md'
]
},
layouts: {
dir: 'layouts',
files: [
'**/*.hbs'
]
}
}
});
app.render()
.then(() => app.use(jsxTemplaterPlugin, {
compileStaticFiles: true,
}));
Now you can find the complete rendered output in the destination folder.
"./"
Path to your assets in your destination directory.
[]
Add your own collections which can be used in YAML front matter or filename.settings.hjson
.
"src"
The current working directory.
false
Print more comments in your terminal to debug a bit better ;).
"app"
Output directory.
false
Export the complete data stack as JSON file.
".html"
Define the extension of your output files.
This can be overridden per file by using YAML Front Matter
or page.settings.json
.
false
Flatten your output directory.
There are 4 necessary types which needs to be defined:
Each type has the following options:
For every type you can create deep ids. The whole path to the file will be used. That makes it possible to have multiple identical named data, partial, layout and page files in different folders.
"[type]"
cwd
You can change the type directory to any folder you like.
Important: for every type directory Mangony creates a watcher if options.watch
is true
.
["**/*.[typeExtension]"]
Pass an array of files to the files property. Globbing is possible.
"/"
By using deep ids the id is the path to your file. But using such ids in handlebars is not possible for your data files. That`s why you can define a path delimiter.
false
Just enable the internal watching of file changes.
serverPlugin
)The dev server is providing the best developer experience by triggering a reload when a file has changed and supporting the rendering of only requested files. That means, even when your project is growing in terms of pages and components it almost does not matter because only changed files get recompiled and rendered.
When the server is registered, it sets servermode
in your root
context to true
. This is helpful if you want to distinguish between static or server related executions.
null
You can pass your own Browser-Sync instance.
true
You can disable browser-sync.
null
You can pass your custom Browser-Sync options object.
null
You can pass your own express instance.
Set to false
if you want to disable the injection of the browser-sync script.
3000
Change the port of the development server.
false
Set to true
if you want to use the provided development server.
true
Set to false
if you do not want to use extensions in your routes.
true
Set to false
if you have already a port provided to express.
true
Set to false
if you have already an asset directory provided to express.
jsxTemplaterPlugin
)With this plugin we can render React, Preact or similar JSX capable projects. Mangony is using a temporary directory to compile your files with ESBuild.
That means .tsx
and .jsx
files are both supported out-of-the-box.
true
Enable/disable the compiling of your files.
hbsTemplaterPlugin
)Boolean
)false
Add the possibility to reference layouts in YAML front matter. {{{yield}}}
will be replaced in your referenced layout with the content of the page.
Boolean
)false
Flag to add a specific data context for your page by referencing a data file id in YAML front matter.
true
Enable/disable the compiling of your files.
Add the possibility to pass your own instance with custom helpers, like:
import Mangony, { hbsTemplaterPlugin, serverPlugin } from 'mangony';
import mgyHelperWrapWith from 'mangony-hbs-helper-wrap-with';
import mgyHelpers from 'mangony-hbs-helpers';
import layouts from 'handlebars-layouts';
import handlebarsHelpers from 'handlebars-helpers';
import handlebars from 'handlebars';
import * as helpers from './helpers/hbs-helpers.js';
const engine = handlebars.create();
handlebarsHelpers({ handlebars: engine });
layouts.register(engine);
mgyHelpers.register(engine);
mgyHelperWrapWith.register(engine);
helpers.register(engine);
const mangony = new Mangony({
cwd: 'src',
dest: 'dist',
exportData: false,
evtNamespace: 'Mangony',
ext: '.html',
flatten: false,
collections: [
'sitemap',
],
types: {
data: {
dir: 'templates',
files: [
'**/*.json',
'**/*.hjson',
],
},
pages: {
dir: 'templates/pages',
files: [
'**/*.hbs',
'**/*.md',
],
},
partials: {
dir: 'templates/partials',
files: [
'**/*.hbs',
],
},
layouts: {
dir: 'templates/layouts',
files: [
'**/*.hbs',
],
},
},
watch: devMode
});
mangony.render()
.then(() => {
return mangony.use(hbsTemplaterPlugin, {
handlebarsInstance: engine,
allow: {
YFMContextData: true,
YFMLayout: true,
},
compileStaticFiles: false,
});
})
.then((templater) => {
templater.then(() => {
return mangony.templater.renderPages();
});
})
Static site generator and server?
In general I love static site generators. Simply deploy the output and you`re done - great.
But there is one major problem. When developing every change leads to the compiling of all pages. In large projects this is very time consuming.
So why not just combine a server for development purpose with a static site generator?
Just checkout the repository, install all dependencies with npm install
and execute npm test
.
See examples
folder for JSX, Handlebars or Freemarker Templates.
see LICENSE.md.
v2.0.0-alpha-20
FAQs
Yet another static site generator in NodeJS focussed on being fast and simple. Mangony fulfills just one task: It takes templates (like handlebars or jsx) and compiles them to an output directory.
The npm package mangony receives a total of 828 weekly downloads. As such, mangony popularity was classified as not popular.
We found that mangony demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.