Building Your Site
Learn how to build your Mordoc documentation site for production deployment.
Building Your Site
Building your Mordoc documentation site compiles your markdown content into optimized static HTML files ready for deployment.
Build Command
Build your documentation site:
npm run buildThis command:
- Processes all markdown files
- Generates HTML pages
- Compiles and minifies CSS/JavaScript
- Optimizes images
- Creates search index
- Outputs to
dist/directory
Build Output
$ npm run build
> mordoc build
✓ Processing markdown files...
✓ Generating pages...
✓ Building search index...
✓ Optimizing assets...
✓ Build complete!
Output: dist/
Pages: 24
Build time: 2.4sOutput Directory
The build generates a dist/ directory containing your complete static site:
dist/
├── index.html
├── get-started/
│ ├── index.html
│ └── creating-project/
│ └── index.html
├── assets/
│ ├── styles.css
│ ├── main.js
│ └── fonts/
├── images/
├── icons/
├── pagefind/ # Search index
│ ├── pagefind.js
│ └── ...
└── config.jsonWhat Gets Built
| Content | Output |
|---|---|
content/en/index.md | dist/index.html |
content/en/guides/intro.md | dist/guides/intro/index.html |
public/images/* | dist/images/* |
config/logo.png | dist/assets/logo.png |
| Styles and scripts | dist/assets/*.css, dist/assets/*.js |
Build Options
Specify Output Directory
npm run build -- --outDir=buildClean Build
Remove previous build and create fresh:
npm run build -- --cleanProduction Build
Optimize for production (default):
npm run build -- --mode=productionDevelopment Build
Faster build without optimizations:
npm run build -- --mode=developmentVerbose Output
Show detailed build information:
npm run build -- --verboseBuild Process
1. Content Processing
- Reads all markdown files from
content/ - Parses frontmatter metadata
- Converts markdown to HTML
- Processes custom components (cards, callouts, etc.)
2. Page Generation
- Creates HTML pages for each markdown file
- Applies templates and layouts
- Injects navigation and TOC
- Generates breadcrumbs
3. Asset Optimization
- CSS: Minifies and combines stylesheets
- JavaScript: Bundles and minifies scripts
- Images: Copies and optionally optimizes
- Fonts: Includes referenced fonts
4. Search Index
- Scans all generated HTML
- Creates searchable index
- Generates Pagefind files
- Excludes configured content
5. Final Steps
- Copies public assets
- Generates sitemap.xml
- Creates 404 page
- Writes config.json
Build Configuration
Configure build behavior in config/site.json:
{
"build": {
"outDir": "dist",
"cleanBuild": true,
"minify": true,
"sourcemaps": false,
"generateSitemap": true
}
}Build Properties
| Property | Type | Description | Default |
|---|---|---|---|
outDir | string | Output directory name | "dist" |
cleanBuild | boolean | Clean before building | true |
minify | boolean | Minify CSS/JS | true |
sourcemaps | boolean | Generate source maps | false |
generateSitemap | boolean | Create sitemap.xml | true |
Performance Optimization
Asset Optimization
Enable minification:
{
"build": {
"minify": true
}
}Optimize images:
{
"build": {
"optimizeImages": true,
"imageQuality": 85
}
}Code Splitting
Large sites benefit from code splitting:
{
"build": {
"codeSplitting": true,
"chunkSize": 100
}
}Lazy Loading
Enable lazy loading for images:
{
"build": {
"lazyLoadImages": true
}
}Build Size Analysis
Analyze build output size:
npm run build -- --analyzeOutput:
Build Size Analysis
===================
HTML: 245 KB
CSS: 42 KB
JavaScript: 98 KB
Images: 1.2 MB
Fonts: 180 KB
Search Index: 156 KB
-------------------
Total: 1.92 MBDeployment Preparation
Pre-Deployment Checklist
- [ ] All content is finalized
- [ ] Links are tested and working
- [ ] Images are optimized
- [ ] Configuration is correct
- [ ] Build completes without errors
- [ ] Site works locally with preview
Sitemap Generation
Sitemap is auto-generated if enabled:
<!-- dist/sitemap.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://docs.example.com/</loc>
<lastmod>2024-01-15</lastmod>
</url>
<url>
<loc>https://docs.example.com/get-started/creating-project</loc>
<lastmod>2024-01-15</lastmod>
</url>
</urlset>Configure in config/site.json:
{
"baseUrl": "https://docs.example.com",
"build": {
"generateSitemap": true
}
}Robots.txt
Create public/robots.txt:
User-agent: *
Allow: /
Sitemap: https://docs.example.com/sitemap.xmlThis file is automatically copied to dist/.
Build Scripts
Custom Build Script
Add to package.json:
{
"scripts": {
"build": "mordoc build",
"build:prod": "mordoc build --mode=production --clean",
"build:analyze": "mordoc build --analyze"
}
}Pre/Post Build Hooks
Run scripts before/after build:
{
"scripts": {
"prebuild": "node scripts/prebuild.js",
"build": "mordoc build",
"postbuild": "node scripts/postbuild.js"
}
}Common Build Issues
Build Fails
Check for:
- Syntax errors in markdown files
- Invalid frontmatter YAML
- Missing files referenced in content
- Incorrect paths in sidenav.yaml
- Configuration JSON syntax errors
Debug:
npm run build -- --verboseOut of Memory
For large sites:
NODE_OPTIONS=--max-old-space-size=4096 npm run buildOr in package.json:
{
"scripts": {
"build": "NODE_OPTIONS=--max-old-space-size=4096 mordoc build"
}
}Slow Build Times
Optimize:
- Reduce image sizes
- Limit markdown file size
- Disable unused features
- Use development build for testing
Assets Not Copied
- Verify files are in
public/directory - Check file paths in markdown
- Ensure proper file permissions
- Rebuild with
--cleanflag
Never edit files in dist/ directly. They're overwritten on each build. Always edit source files in content/, config/, or public/.
Build for Different Environments
Staging Build
{
"scripts": {
"build:staging": "mordoc build --env=staging"
}
}config/site.staging.json:
{
"baseUrl": "https://staging.docs.example.com",
"noindex": true
}Production Build
{
"scripts": {
"build:prod": "mordoc build --env=production"
}
}Continuous Integration
GitHub Actions
.github/workflows/build.yml:
name: Build Documentation
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Build site
run: npm run build
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: dist
path: dist/GitLab CI
.gitlab-ci.yml:
build:
image: node:18
script:
- npm ci
- npm run build
artifacts:
paths:
- dist/
only:
- mainBest Practices
Build Performance
- Incremental builds: Use caching in CI/CD
- Parallel processing: Enable if supported
- Optimize assets: Compress images before committing
- Clean selectively: Only when necessary
Build Verification
After building:
- Check build output for errors
- Verify all pages generated
- Test search functionality
- Check asset paths
- Validate HTML (optional)
Version Control
.gitignore:
node_modules/
dist/
.DS_Store
*.logCommit source files, not build output.
Next Steps
After building:
- Preview - Test the build locally
- Version Control - Commit your changes
- Launch - Deploy to production
Search functionality requires a production build to generate the search index. The development server doesn't include full search.

