optimize page release
diff --git a/_jade/layouts/tool-spa.jade b/_jade/layouts/tool-spa.jade
index 712b037..bfdd0da 100644
--- a/_jade/layouts/tool-spa.jade
+++ b/_jade/layouts/tool-spa.jade
@@ -1,6 +1,12 @@
extends basic
block content
+ nav(class='navbar navbar-default navbar-fixed-top doc-nav' id="ec-doc-nav")
+ if ecWWWLang == 'en'
+ include ../en/nav
+ else
+ include ../components/nav
+
.page-main
- #page-#{pageConfig.pageName}.page-spa-container
- include ../../_generated/spa/#{pageConfig.pageName}/body.html
\ No newline at end of file
+ div(id="page-#{pageConfig.pageName}" class="page-spa-container")
+ |!{pageConfig.bodyHtml}
\ No newline at end of file
diff --git a/bin/asset/template/page-en.jade b/bin/asset/template/page-en.jade
index 6a27759..68d7aa9 100644
--- a/bin/asset/template/page-en.jade
+++ b/bin/asset/template/page-en.jade
@@ -1,4 +1,4 @@
-extends ../layouts/tool-spa
+extends ../../layouts/tool-spa
block extra_head
diff --git a/bin/asset/template/page-zh.jade b/bin/asset/template/page-zh.jade
index 6a27759..68d7aa9 100644
--- a/bin/asset/template/page-zh.jade
+++ b/bin/asset/template/page-zh.jade
@@ -1,4 +1,4 @@
-extends ../layouts/tool-spa
+extends ../../layouts/tool-spa
block extra_head
diff --git a/bin/build.js b/bin/build.js
index 1969475..d3198ee 100644
--- a/bin/build.js
+++ b/bin/build.js
@@ -183,7 +183,7 @@
cwd: basePath
});
- const spaPageConfigs = JSON.parse(fs.readFileSync(path.resolve(__dirname, + '../config/spa-pages.json'), 'utf-8'));
+ const spaPageConfigs = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../config/spa-pages.json'), 'utf-8'));
const hashes = {};
for (let lang of ['zh', 'en']) {
@@ -204,7 +204,14 @@
const pageCfg = spaPageConfigs.find(pageCfg => srcPath.endsWith(pageCfg.entry));
if (pageCfg) {
- cfg.pageConfig = pageCfg;
+ cfg.pageConfig = Object.assign({}, pageCfg, {
+ // Because jade doesn't support dynamic include. we have to read HTML and insert it in jade manually.
+ bodyHtml: fs.readFileSync(path.resolve(__dirname, `../_generated/spa/${pageCfg.pageName}/body.html`), 'utf-8')
+ });
+ }
+ else {
+ // Avoid error
+ cfg.pageConfig = {};
}
// This props can be read in jade tpl, like: `#{cdnPayRoot}`
@@ -279,7 +286,30 @@
}
async function copyResource(config) {
- const srcRelativePathList = await globby([
+
+ async function doCopy(pattern, cwd) {
+ const srcRelativePathList = await globby(pattern, {
+ cwd
+ });
+
+ for (let lang of LANGUAGES) {
+ for (let i = 0; i < srcRelativePathList.length; i++) {
+ let srcRelativePath = srcRelativePathList[i];
+ let srcAbsolutePath = path.resolve(cwd, srcRelativePath);
+ let destAbsolutePath = path.resolve(config.releaseDestDir, lang, srcRelativePath);
+
+
+ fse.ensureDirSync(path.dirname(destAbsolutePath));
+ fs.copyFileSync(srcAbsolutePath, destAbsolutePath);
+
+ replaceLog('(' + (i + 1) + '/' + srcRelativePathList.length + ') ' + chalk.green(`resource copied to: ${destAbsolutePath}`));
+ }
+ }
+ }
+
+ console.log();
+
+ await doCopy([
'vendors/**/*',
'images/**/*',
'asset/map/**/*',
@@ -288,24 +318,12 @@
'builder/**/*',
'dist/**/*',
'video/**/*'
- ], {
- cwd: projectDir
- });
+ ], projectDir);
- console.log();
-
- for (let lang of LANGUAGES) {
- for (let i = 0; i < srcRelativePathList.length; i++) {
- let srcRelativePath = srcRelativePathList[i];
- let srcAbsolutePath = path.resolve(projectDir, srcRelativePath);
- let destAbsolutePath = path.resolve(config.releaseDestDir, lang, srcRelativePath);
-
- fse.ensureDirSync(path.dirname(destAbsolutePath));
- fs.copyFileSync(srcAbsolutePath, destAbsolutePath);
-
- replaceLog('(' + (i + 1) + '/' + srcRelativePathList.length + ') ' + chalk.green(`resource copied to: ${destAbsolutePath}`));
- }
- }
+ await doCopy([
+ '**/*',
+ '!**/index.html',
+ ], path.resolve(__dirname, '../_generated/spa/'))
console.log('\ncopyResources done.');
}
diff --git a/bin/createPage.js b/bin/createPage.js
index 51c6efb..9be2460 100644
--- a/bin/createPage.js
+++ b/bin/createPage.js
@@ -20,46 +20,72 @@
pageChineseTitle,
}) {
const entry = path.join(pageName, 'index.jade');
- spaPages.push({
+
+ const idx = spaPages.findIndex(page => page.pageName === pageName);
+
+ function doCreatePage() {
+ fse.copySync(
+ path.join(__dirname, "asset/template/page-redirect.jade"),
+ path.join(JADE_PATH, `${pageName}.jade`),
+ { overwrite: true }
+ );
+
+ fse.copySync(
+ path.join(__dirname, "asset/template/page-zh.jade"),
+ path.join(JADE_ZH_PATH, entry),
+ { overwrite: true }
+ );
+
+ fse.copySync(
+ path.join(__dirname, "asset/template/page-en.jade"),
+ path.join(JADE_EN_PATH, entry),
+ { overwrite: true }
+ );
+
+ fs.writeFileSync(SPA_PAGE_CONFIG_PATH, JSON.stringify(spaPages, null, 2), 'utf-8');
+
+ console.log('Page created successfully!');
+ console.log('You can change the page title in the config/spa-pages.json');
+ }
+
+ const pageCfg = {
projectName,
pageName,
pageTitle,
pageChineseTitle,
entry
- });
+ };
+ if (idx >= 0) {
+ rl.question(`Page exists. Do you wan\'t to replace it? (Yes or No): `, function (response) {
+ if (response.toLowerCase() === 'yes' || response.toLowerCase() === 'y') {
+ spaPages[idx] = pageCfg;
+ doCreatePage();
+ }
+ else {
+ return;
+ }
- fse.copySync(
- path.join(__dirname, "asset/template/page-redirect.jade"),
- path.join(JADE_PATH, `${pageName}.jade`)
- );
+ rl.close();
+ });
+ }
+ else {
+ spaPages.push(pageCfg);
+ doCreatePage();
- fse.copySync(
- path.join(__dirname, "asset/template/page-zh.jade"),
- path.join(JADE_ZH_PATH, entry)
- );
-
- fse.copySync(
- path.join(__dirname, "asset/template/page-en.jade"),
- path.join(JADE_EN_PATH, entry)
- );
-
- fs.writeFileSync(SPA_PAGE_CONFIG_PATH, JSON.stringify(spaPages, null, 2), 'utf-8');
+ rl.close();
+ }
}
rl.question('Project Name? (It will use it locate the project): ', function (projectName) {
rl.question('Page Name? (It will be used to create page file): ', function (pageName) {
rl.question('Page Title? (It will be displayed on title): ', function (pageTitle) {
rl.question('Page Chinese Title? (It will be displayed on title): ', function (pageChineseTitle) {
- rl.close();
-
createPage({
projectName,
pageName,
pageTitle,
pageChineseTitle
});
- console.log('Page created successfully!');
- console.log('You can change the page title in the config/spa-pages.json');
});
});
});
diff --git a/bin/release.sh b/bin/release.sh
index e102fb4..ba89d3c 100644
--- a/bin/release.sh
+++ b/bin/release.sh
@@ -73,6 +73,7 @@
echo "Build examples done."
# Build SPA pages.
+cd ${thisScriptDir}
node releasePages.js
# Build www
diff --git a/bin/releasePages.js b/bin/releasePages.js
index 5b22ba5..c59824b 100644
--- a/bin/releasePages.js
+++ b/bin/releasePages.js
@@ -1,19 +1,21 @@
const fs = require('fs');
const shell = require('shelljs');
const path = require('path');
+const fse = require('fs-extra');
const spaPageConfigs = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../config/spa-pages.json'), 'utf-8'));
async function run() {
for (const pageCfg of spaPageConfigs) {
+ console.log(`Building ${pageCfg.projectName}....`);
const projectPath = path.resolve(__dirname, `../../${pageCfg.projectName}`);
shell.cd(projectPath);
shell.exec('npm run release');
shell.cd(__dirname);
- shell.cp(
- '-R',
+
+ fse.copySync(
`${projectPath}/dist`,
- path.resolve(__dirname, '_generated/spa', pageCfg.pageName)
+ path.resolve(__dirname, '../_generated/spa', pageCfg.pageName)
);
}
}