Skip to content

Commit

Permalink
build: supports pre-render for docs and add sitemap generator script (#…
Browse files Browse the repository at this point in the history
…3358)

* build: supports prerender for docs

* docs: add verification file

* build: fix npm script

* chore: clean scripts

* docs: add sitemap generator script
  • Loading branch information
hsuanxyz authored and vthinkxie committed Apr 25, 2019
1 parent f155337 commit 19f9344
Show file tree
Hide file tree
Showing 18 changed files with 380 additions and 55 deletions.
45 changes: 26 additions & 19 deletions angular.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,15 @@
"site/doc/assets",
"site/doc/favicon.ico",
"site/doc/404.html",
"site/doc/google854eb8b183564acb.html",
{
"glob": "**/*",
"input": "./node_modules/@ant-design/icons-angular/src/inline-svg/",
"output": "/assets/"
},
"site/doc/manifest.json"
],
"styles": [
"site/doc/styles.less"
],
"styles": ["site/doc/styles.less"],
"es5BrowserSupport": true
},
"configurations": {
Expand All @@ -53,6 +52,24 @@
}
}
},
"server": {
"builder": "@angular-devkit/build-angular:server",
"options": {
"outputPath": "dist/server",
"main": "./site/doc/main.server.ts",
"tsConfig": "./site/doc/tsconfig.server.json"
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "./site/doc/environments/environment.ts",
"with": "./site/doc/environments/environment.prod.ts"
}
]
}
}
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
Expand All @@ -67,12 +84,8 @@
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"site/doc/tsconfig.app.json"
],
"exclude": [
"**/node_modules/**"
]
"tsConfig": ["site/doc/tsconfig.app.json"],
"exclude": ["**/node_modules/**"]
}
}
}
Expand All @@ -97,9 +110,7 @@
"output": "/assets/"
}
],
"styles": [
"components/ng-zorro-antd.less"
],
"styles": ["components/ng-zorro-antd.less"],
"es5BrowserSupport": true
},
"configurations": {
Expand Down Expand Up @@ -137,12 +148,8 @@
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"site/iframe/tsconfig.app.json"
],
"exclude": [
"**/node_modules/**"
]
"tsConfig": ["site/iframe/tsconfig.app.json"],
"exclude": ["**/node_modules/**"]
}
}
}
Expand Down Expand Up @@ -187,4 +194,4 @@
"prefix": "app"
}
}
}
}
18 changes: 12 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,14 @@
"scripts": {
"build-iframe": "node --max_old_space_size=5120 ./node_modules/@angular/cli/bin/ng build --project=ng-zorro-antd-iframe --prod --base-href ./",
"build-site": "node --max_old_space_size=5120 ./node_modules/@angular/cli/bin/ng build --prod",
"build-static": "bash ./scripts/build/prerender.sh",
"build-site-server": "node --max_old_space_size=5120 ./node_modules/@angular/cli/bin/ng run ng-zorro-antd-doc:server:production",
"build:client-and-server-bundles": "npm run build-site && npm run build-site-server",
"build:docs": "npm run build:client-and-server-bundles && npm run build:prerender && npm run build-iframe && npm run helper",
"build:prerender": "npm run compile:prerender && npm run generate:prerender",
"compile:prerender": "tsc -p scripts/prerender/tsconfig.json",
"generate:prerender": "cd dist && node prerender && node sitemap",
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s --pkg components/package.json && node ./scripts/site/replace-scope-prefix.js",
"doc": "npm run site:init && node --max_old_space_size=5120 ./node_modules/@angular/cli/bin/ng build --prod",
"doc": "npm run site:init && npm run build-site",
"format:check": "prettier --config ./.prettierrc --list-different \"component/**/*{.ts}\"",
"generate": "ng build ng-zorro-antd-lib",
"helper": "bash ./scripts/release-helper.sh",
Expand All @@ -23,22 +28,24 @@
"migration-styles": "node ./scripts/build/migration-styles.js",
"ng": "ng",
"postgenerate": "node scripts/build/compile-styles.js && cp README.md publish/README.md && npm run migration-styles && npm run schematic:generate",
"pre-release": "npm run site:init && bash ./scripts/build/replace-publish.sh && npm run generate && npm run build-site && npm run build-iframe && npm run helper",
"pre-release": "npm run site:init && bash ./scripts/build/replace-publish.sh && npm run generate && npm run build:docs",
"release": "node ./scripts/publish/publish.js",
"schematic:build": "node ./scripts/schematics/set-theme.js && node ./scripts/schematics/set-version.js && npm run schematic:tsc && node ./scripts/schematics/copy-resources",
"schematic:demo": "node ./scripts/schematics/demo2schematics",
"schematic:generate": "npm run schematic:demo && npm run schematic:build && rm -rf schematics/demo",
"schematic:tsc": "tsc -p schematics/tsconfig.json",
"site:init": "node ./scripts/site/generate-site init && node ./scripts/site/generateColorLess",
"site:start": "node ./scripts/site/generate-site init && node ./scripts/site/generateColorLess && ng serve --port 0 --open",
"site:start": "npm run site:init && ng serve --port 0 --open",
"site": "node ./scripts/site/generate-site",
"start": "ng serve --port 0",
"test": "ng test --watch=false --code-coverage"
},
"dependencies": {
"@angular/cdk": "^7.3.0",
"@angular/platform-server": "^7.2.14",
"@angular/pwa": "^0.12.2",
"@ant-design/icons-angular": "^2.0.2",
"@nguniversal/module-map-ngfactory-loader": "^7.1.1",
"date-fns": "^1.29.0"
},
"devDependencies": {
Expand All @@ -59,7 +66,6 @@
"@angular/platform-browser-dynamic": "~7.2.0",
"@angular/router": "~7.2.0",
"@angular/service-worker": "~7.2.0",
"@awesome-fe/prerender": "0.0.5",
"@schematics/angular": "~7.2.0",
"@stackblitz/sdk": "^1.1.1",
"@types/fs-extra": "^5.0.4",
Expand All @@ -74,7 +80,6 @@
"conventional-changelog-cli": "^2.0.1",
"core-js": "^2.5.4",
"fs-extra": "^6.0.1",
"http-server-spa": "^1.3.0",
"husky": "^1.0.1",
"jasmine-core": "~2.99.1",
"karma": "~3.0.0",
Expand All @@ -96,6 +101,7 @@
"readline-sync": "^1.4.9",
"remark": "^8.0.0",
"rxjs": "~6.3.3",
"sitemap": "^2.1.0",
"ts-node": "~7.0.0",
"tsickle": ">=0.34.0",
"tslib": "^1.9.0",
Expand Down
20 changes: 0 additions & 20 deletions scripts/build/prerender.sh

This file was deleted.

47 changes: 47 additions & 0 deletions scripts/prerender/prerender.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Load zone.js for the server.
import { ensureDirSync, readFileSync, writeFileSync } from 'fs-extra';
import { join } from 'path';
import 'reflect-metadata';
import 'zone.js/dist/zone-node';

import { enableProdMode } from '@angular/core';
// Faster server renders w/ Prod mode (dev mode never needed)
enableProdMode();

// Fix the `Event is not defined` error https://github.com/angular/universal/issues/844
// tslint:disable-next-line no-string-literal
global['Event'] = null;

// Import module map for lazy loading
import { renderModuleFactory } from '@angular/platform-server';
import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';
import { ROUTES } from './static.paths';

// * NOTE :: leave this as require() since this file is built Dynamically from webpack
const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./server/main');

const BROWSER_FOLDER = join(process.cwd(), '/');

// Load the index.html file containing referances to your application bundle.
const index = readFileSync(join('./', 'index.html'), 'utf8');

let previousRender = Promise.resolve();

// Iterate each route path
ROUTES.forEach(route => {
const fullPath = join(BROWSER_FOLDER, route);

// Make sure the directory structure is there
ensureDirSync(fullPath);

// Writes rendered HTML to index.html, replacing the file if it already exists.
previousRender = previousRender
.then(_ =>
renderModuleFactory(AppServerModuleNgFactory, {
document: index,
url: route,
extraProviders: [provideModuleMap(LAZY_MODULE_MAP)]
})
)
.then(html => writeFileSync(join(fullPath, 'index.html'), html));
});
22 changes: 22 additions & 0 deletions scripts/prerender/sitemap.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import * as sitemap from 'sitemap';
import { writeFileSync } from 'fs';
import { ROUTES } from './static.paths';

const urls = Array.from(new Set(ROUTES.filter(r => r !== '/').map(r => r.replace(/\/(zh|en)$/, '')))).map(
(r: string) => {
return {
url: `${r}/en`,
changefreq: 'weekly',
priority: r.includes('docs') ? 0.5 : 0.8,
links: [{ lang: 'en', url: `${r}/en` }, { lang: 'zh', url: `${r}/zh` }]
};
}
);

const sitemapInstance = sitemap.createSitemap({
hostname: 'https://ng.ant.design',
cacheTime: 600000,
urls: [{ url: '/', changefreq: 'weekly', priority: 0.5, lastmodrealtime: true }, ...urls]
});

writeFileSync('sitemap.xml', sitemapInstance.toString());
141 changes: 141 additions & 0 deletions scripts/prerender/static.paths.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
export const ROUTES = [
'/',
'/components/affix/en',
'/components/affix/zh',
'/components/alert/en',
'/components/alert/zh',
'/components/anchor/en',
'/components/anchor/zh',
'/components/auto-complete/en',
'/components/auto-complete/zh',
'/components/avatar/en',
'/components/avatar/zh',
'/components/back-top/en',
'/components/back-top/zh',
'/components/badge/en',
'/components/badge/zh',
'/components/breadcrumb/en',
'/components/breadcrumb/zh',
'/components/button/en',
'/components/button/zh',
'/components/calendar/en',
'/components/calendar/zh',
'/components/card/en',
'/components/card/zh',
'/components/carousel/en',
'/components/carousel/zh',
'/components/cascader/en',
'/components/cascader/zh',
'/components/checkbox/en',
'/components/checkbox/zh',
'/components/collapse/en',
'/components/collapse/zh',
'/components/comment/en',
'/components/comment/zh',
'/components/date-picker/en',
'/components/date-picker/zh',
'/components/divider/en',
'/components/divider/zh',
'/components/drawer/en',
'/components/drawer/zh',
'/components/dropdown/en',
'/components/dropdown/zh',
'/components/empty/en',
'/components/empty/zh',
'/components/form/en',
'/components/form/zh',
'/components/grid/en',
'/components/grid/zh',
'/components/icon/en',
'/components/icon/zh',
'/components/input-number/en',
'/components/input-number/zh',
'/components/input/en',
'/components/input/zh',
'/components/layout/en',
'/components/layout/zh',
'/components/list/en',
'/components/list/zh',
'/components/mention/en',
'/components/mention/zh',
'/components/menu/en',
'/components/menu/zh',
'/components/message/en',
'/components/message/zh',
'/components/modal/en',
'/components/modal/zh',
'/components/notification/en',
'/components/notification/zh',
'/components/page-header/en',
'/components/page-header/zh',
'/components/pagination/en',
'/components/pagination/zh',
'/components/popconfirm/en',
'/components/popconfirm/zh',
'/components/popover/en',
'/components/popover/zh',
'/components/progress/en',
'/components/progress/zh',
'/components/radio/en',
'/components/radio/zh',
'/components/rate/en',
'/components/rate/zh',
'/components/select/en',
'/components/select/zh',
'/components/skeleton/en',
'/components/skeleton/zh',
'/components/slider/en',
'/components/slider/zh',
'/components/spin/en',
'/components/spin/zh',
'/components/statistic/en',
'/components/statistic/zh',
'/components/steps/en',
'/components/steps/zh',
'/components/switch/en',
'/components/switch/zh',
'/components/table/en',
'/components/table/zh',
'/components/tabs/en',
'/components/tabs/zh',
'/components/tag/en',
'/components/tag/zh',
'/components/time-picker/en',
'/components/time-picker/zh',
'/components/timeline/en',
'/components/timeline/zh',
'/components/tooltip/en',
'/components/tooltip/zh',
'/components/transfer/en',
'/components/transfer/zh',
'/components/tree-select/en',
'/components/tree-select/zh',
'/components/tree/en',
'/components/tree/zh',
'/components/upload/en',
'/components/upload/zh',
'/doc/introduce/en',
'/doc/introduce/zh',
'/docs/animations/en',
'/docs/animations/zh',
'/docs/changelog/en',
'/docs/changelog/zh',
'/docs/contributing/en',
'/docs/contributing/zh',
'/docs/customize-theme/en',
'/docs/customize-theme/zh',
'/docs/faq/en',
'/docs/faq/zh',
'/docs/getting-started/en',
'/docs/getting-started/zh',
'/docs/i18n/en',
'/docs/i18n/zh',
'/docs/introduce/en',
'/docs/introduce/zh',
'/docs/recommendation/en',
'/docs/recommendation/zh',
'/docs/schematics/en',
'/docs/schematics/zh',
'/docs/universal/en',
'/docs/universal/zh'
];
Loading

0 comments on commit 19f9344

Please sign in to comment.