You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2021/09/10 02:49:59 UTC

[echarts-examples] 07/15: fix build example

This is an automated email from the ASF dual-hosted git repository.

shenyi pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/echarts-examples.git

commit bfb64a2da816b160843720ecb6742ba00d9a5897
Author: pissang <bm...@gmail.com>
AuthorDate: Tue Sep 7 16:04:17 2021 +0800

    fix build example
---
 package.json                  |  8 ++++----
 public/examples/tsconfig.json | 24 ++++++++++++------------
 src/common/store.js           |  1 +
 tool/build-example.js         | 33 +++++++++++++++++++--------------
 tool/compile-example.js       | 35 +++++++++++++++++++++++++++++++++++
 tool/screenshot.html          |  5 +++--
 6 files changed, 74 insertions(+), 32 deletions(-)

diff --git a/package.json b/package.json
index cbc49e1..90c55fe 100644
--- a/package.json
+++ b/package.json
@@ -5,11 +5,11 @@
   "scripts": {
     "build": "npx webpack --config build/webpack.config.js --mode production",
     "watch": "npx webpack --config build/webpack.config.js --mode development --devtool source-map --watch",
-    "localsite": "npm run build && node build/copyResource.js --env localsite",
-    "release": "npm run build && node build/copyResource.js --env asf",
+    "localsite": "npm run compile:example || npm run build && node build/copyResource.js --env localsite",
+    "release": "npm run compile:example || npm run build && node build/copyResource.js --env asf",
     "dev": "npx concurrently --kill-others \"npm:watch\" \"npm:server\"",
-    "build:example": "node tool/build-example.js && node tool/build-example.js --source data-gl",
-    "compile:example": "tsc --project public/examples/tsconfig.json || prettier --write public/examples/js",
+    "build:example": "npm run compile:example || node tool/build-example.js && node tool/build-example.js --gl",
+    "compile:example": "node tool/compile-example.js",
     "test:e2e": "node e2e/main.js --bundler webpack -m",
     "test:e2e:local": "node e2e/main.js --bundler webpack -m --local",
     "test:e2e:esbuild": "node e2e/main.js --bundler esbuild -m",
diff --git a/public/examples/tsconfig.json b/public/examples/tsconfig.json
index b689d9a..f47c85b 100644
--- a/public/examples/tsconfig.json
+++ b/public/examples/tsconfig.json
@@ -1,13 +1,13 @@
 {
-    "compilerOptions": {
-        "target": "ES6",
-        "strict": true,
-        "moduleResolution": "node",
-        "allowJs": true,
-        "checkJs": false,
-        "pretty": true,
-        "outDir": "./js/",
-        "baseUrl": "./"
-    },
-    "include": ["./ts/**/*.ts", "./ts/**/*.js", "./types/**/*.d.ts"]
-}
\ No newline at end of file
+  "compilerOptions": {
+    "target": "ES6",
+    "strict": true,
+    "moduleResolution": "node",
+    "allowJs": true,
+    "checkJs": false,
+    "pretty": true,
+    "outDir": "./js/",
+    "baseUrl": "./"
+  },
+  "include": ["./ts/**/*.ts", "./ts/**/*.js", "./types/**/*.d.ts"]
+}
diff --git a/src/common/store.js b/src/common/store.js
index f6a56df..af35246 100644
--- a/src/common/store.js
+++ b/src/common/store.js
@@ -49,6 +49,7 @@ export function parseSourceCode(code) {
       .replace(/\/\*[\w\W]*?\*\//, '')
       .trim()
       // ts code needs add `export {}` to be a module. remove it.
+      // FIXME
       .replace(/export\s+\{\s*\}\s*;?$/g, '')
   );
 }
diff --git a/tool/build-example.js b/tool/build-example.js
index ac763da..b23290b 100644
--- a/tool/build-example.js
+++ b/tool/build-example.js
@@ -36,8 +36,8 @@ function codeSize(code) {
 const parser = new argparse.ArgumentParser({
   addHelp: true
 });
-parser.addArgument(['-s', '--source'], {
-  help: 'Source folder'
+parser.addArgument(['--gl'], {
+  help: 'If generating gl'
 });
 parser.addArgument(['-t', '--theme'], {
   help: 'Theme list, default to be all'
@@ -51,7 +51,7 @@ parser.addArgument(['--no-thumb'], {
 });
 
 const args = parser.parseArgs();
-const sourceFolder = args.source || 'data';
+const isGL = args.gl;
 let themeList = args.theme || 'default,dark';
 let matchPattern = args.pattern;
 if (matchPattern) {
@@ -107,7 +107,8 @@ async function takeScreenshot(
 ) {
   const thumbFolder = theme !== 'default' ? 'thumb-' + theme : 'thumb';
   const page = await browser.newPage();
-  const thumbDir = `${rootDir}public/${sourceFolder}/${thumbFolder}`;
+  const dataDir = isGL ? 'data-gl' : 'data';
+  const thumbDir = `${rootDir}public/${dataDir}/${thumbFolder}`;
   const fileBase = `${thumbDir}/${basename}`;
   const webmFile = `${fileBase}.webm`;
 
@@ -138,7 +139,9 @@ async function takeScreenshot(
     width: shotWidth || DEFAULT_PAGE_WIDTH,
     height: (shotWidth || DEFAULT_PAGE_WIDTH) * DEFAULT_PAGE_RATIO
   });
-  let url = `${SCREENSHOT_PAGE_URL}?c=${basename}&t=${theme}&s=${sourceFolder}`;
+  let url = `${SCREENSHOT_PAGE_URL}?c=${basename}&t=${theme}${
+    isGL ? '&gl' : ''
+  }`;
 
   if (hasVideo) {
     url += `&start=${videoStart}&end=${videoEnd}`;
@@ -193,9 +196,9 @@ async function takeScreenshot(
         return _$getEChartsOption();
       });
       const optionStr = optionToJson(option);
-      fse.ensureDirSync(`${rootDir}public/${sourceFolder}/option/`);
+      fse.ensureDirSync(`${rootDir}public/${dataDir}/option/`);
       fs.writeFileSync(
-        `${rootDir}public/${sourceFolder}/option/${basename}.json`,
+        `${rootDir}public/${dataDir}/option/${basename}.json`,
         optionStr,
         'utf-8'
       );
@@ -261,7 +264,9 @@ async function takeScreenshot(
   // TODO puppeteer will have Navigation Timeout Exceeded: 30000ms exceeded error in these examples.
   const screenshotBlackList = [];
 
-  const files = await globby(`${rootDir}public/${sourceFolder}/*.js`);
+  const files = await globby(
+    `${rootDir}public/examples/js/${isGL ? 'gl/' : ''}*.js`
+  );
 
   const exampleList = [];
 
@@ -286,10 +291,7 @@ async function takeScreenshot(
 
       let fmResult;
       try {
-        const code = fs.readFileSync(
-          `${rootDir}public/${sourceFolder}/${basename}.js`,
-          'utf-8'
-        );
+        const code = fs.readFileSync(fileName, 'utf-8');
         fmResult = matter(code, {
           delimiters: ['/*', '*/']
         });
@@ -355,7 +357,10 @@ export default ${JSON.stringify(exampleList, null, 2)}`;
 
   if (!matchPattern) {
     fs.writeFileSync(
-      path.join(__dirname, `../src/data/chart-list-${sourceFolder}.js`),
+      path.join(
+        __dirname,
+        `../src/data/chart-list-data${isGL ? '-gl' : ''}.js`
+      ),
       code,
       'utf-8'
     );
@@ -420,7 +425,7 @@ export default ${JSON.stringify(exampleList, null, 2)}`;
             }
           );
         },
-        sourceFolder === 'data-gl' ? 2 : 16
+        isGL ? 2 : 16
       );
 
       await runTasks(
diff --git a/tool/compile-example.js b/tool/compile-example.js
new file mode 100644
index 0000000..321bf4c
--- /dev/null
+++ b/tool/compile-example.js
@@ -0,0 +1,35 @@
+const globby = require('globby');
+const fs = require('fs');
+const path = require('path');
+const shell = require('shelljs');
+
+const exampleDir = path.join(__dirname, '../public/examples');
+
+async function run() {
+  const hasError =
+    shell.exec(`tsc --project ${path.join(exampleDir, 'tsconfig.json')}`)
+      .code !== 0;
+  shell.exec(`prettier --write ${path.join(exampleDir, 'js')}`);
+
+  const files = await globby(path.join(exampleDir, `js/**/*.js`));
+
+  for (let file of files) {
+    const content =
+      fs
+        .readFileSync(file, 'utf-8')
+        .trim()
+        // ts code needs add `export {}` to be a module. remove it.
+        // FIXME
+        .replace(/export\s+\{\s*\}\s*;?$/g, '')
+        .replace(/^'use strict';/, '')
+        .trim() + '\n';
+
+    fs.writeFileSync(file, content, 'utf-8');
+  }
+
+  if (hasError) {
+    shell.exit(1);
+  }
+}
+
+run();
diff --git a/tool/screenshot.html b/tool/screenshot.html
index ebab89e..271e8cc 100644
--- a/tool/screenshot.html
+++ b/tool/screenshot.html
@@ -141,10 +141,11 @@
           console.error('No ROOT_PATH specified. Use default ROOT_PATH "."');
           window.ROOT_PATH = '.';
         }
-        const sourceFolder = params.s || 'data';
         const scriptTag = document.createElement('script');
         scriptTag.async = false;
-        scriptTag.src = `../public/${sourceFolder}/${params.c}.js`;
+        scriptTag.src = `../public/examples/js${'gl' in params ? '/gl' : ''}/${
+          params.c
+        }.js`;
         document.body.appendChild(scriptTag);
 
         let videoRecorder;

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org