ng-static-site-generator

ng-static-site-generator
is a tool for building an Angular app and blog entries into a static html and css website. Building a client app to support dynamic functionality in the browser is also supported.
There is a starter project available. See kevinphelps/kevinphelps.me for another example.
Features
Installation
Clone the starter project to get started fast!
yarn add [--exact] ng-static-site-generator
or npm install --save-dev [--save-exact] ng-static-site-generator
The following peerDependencies
are required:
{
"dependencies": {
"@angular/animations": ">4.0.0",
"@angular/common": ">4.0.0",
"@angular/core": ">4.0.0",
"@angular/http": ">4.0.0",
"@angular/platform-browser": ">4.0.0",
"@angular/platform-server": ">4.0.0",
"@angular/router": ">4.0.0",
"reflect-metadata": ">0.1.0",
"rxjs": ">5.0.0",
"typescript": ">2.3.0",
"zone.js": ">0.8.0"
}
}
CLI Commands
ng-static-site-generator build
: Builds the static site.ng-static-site-generator build --prod
: Builds the static site for production (AOT compilation, minify js and html).ng-static-site-generator watch
: Builds the static site and rebuilds after changes.
Configuration
ng-static-static-generator
is configured via a file named ng-static-static-generator.json
at the root of the project.
{
"distPath": "./dist",
"blogPath": "./src/blog",
"stylesPath": "./src/styles.scss",
"templatePath": "./src/index.html",
"appModule": "./src/app/app.module#AppModule",
"appRoutes": "./src/app/app-routing.module#routes",
"appComponent": "./src/app/app.component#AppComponent",
"mainPath": "./src/main.ts",
"polyfillsPath": "./src/polyfills.ts"
}
Using the NgStaticSiteGeneratorModule
ng-static-static-generator
exposes functionality via the NgStaticSiteGeneratorModule
.
import { ModuleOptions, NgStaticSiteGeneratorModule } from 'ng-static-site-generator';
const ngStaticSiteGeneratorModuleOptions: ModuleOptions = {
openExternalLinksInNewTab: false
};
@NgModule({
imports: [
...
NgStaticSiteGeneratorModule.forRoot(ngStaticSiteGeneratorModuleOptions)
],
...
})
export class AppModule { }
import { BlogService } from 'ng-static-site-generator';
@Component({
selector: 'app-my-component',
templateUrl: './my-component.component.html',
styleUrls: ['./my-component.component.scss']
})
export class MyComponent {
constructor(private blogService: BlogService) { }
}
Blog entry source files
ng-static-site-generator
uses jekyll-style files for blog entries. Files are placed in the blogPath
folder specifed in ng-static-static-generator.json
. (Note: Nesting folders within the blog path is not yet supported.)
- filename:
YYYY-MM-DD-url-slug.html
or YYYY-MM-DD-url-slug.md
(e.g. 2017-06-26-this-is-a-blog-entry.html
) - file contents: Metadata is given at the top of file delimited by lines containing
---
. Everything after the second ---
is body content written in html or markdown.
Example:
---
title: This is the Title of the Blog Entry
description: This is a short description of the blog entry.
customProperty: This is a custom property. (Optional, of course.)
---
##This is the Title of the Blog Entry
This is the content of the blog entry.
<p>You can also write content in html if you want.</p>