| const fs = require('fs'); |
| const fse = require('fs-extra'); |
| const globby = require('globby'); |
| const chalk = require('chalk'); |
| const path = require('path'); |
| const assert = require('assert'); |
| |
| const argv = require('yargs').argv; |
| const projectDir = __dirname; |
| |
| /** |
| * ------------------------------------------------------------------------ |
| * Usage: |
| * |
| * ```shell |
| * node build.js --env asf # build all for asf |
| * node build.js --env echartsjs # build all for echartsjs. |
| * node build.js --env localsite # build all for localsite. |
| * node build.js --env dev # the same as "debug", dev the content of examples. |
| * # Check `./config` to see the available env |
| * ``` |
| * ------------------------------------------------------------------------ |
| */ |
| |
| function initEnv() { |
| let envType = argv.env; |
| let isDev = |
| argv.dev != null || |
| argv.debug != null || |
| envType === 'debug' || |
| envType === 'dev'; |
| |
| if (isDev) { |
| console.warn( |
| '====================================================================' |
| ); |
| console.warn('THIS IS IN DEV MODE'); |
| console.warn( |
| '!!! Please input your local host in `config/env.dev.js` firstly !!!' |
| ); |
| console.warn( |
| '====================================================================' |
| ); |
| envType = 'dev'; |
| } |
| |
| if (!envType) { |
| throw new Error('--env MUST be specified'); |
| } |
| |
| let config = require('../config/env.' + envType); |
| |
| if (isDev) { |
| console.warn( |
| '====================================================================' |
| ); |
| console.warn('Please visit the website: '); |
| console.warn(config.host); |
| console.warn( |
| '====================================================================' |
| ); |
| } |
| |
| assert(path.isAbsolute(config.releaseDestDir)); |
| |
| config.envType = envType; |
| |
| return config; |
| } |
| |
| async function copyResourcesToDest(config) { |
| let basePath = path.resolve(projectDir, '../public'); |
| const filePaths = await globby( |
| [ |
| '**/*', |
| // Use jade in echarts-www |
| '!zh/*', |
| '!en/*' |
| ], |
| { |
| cwd: basePath |
| } |
| ); |
| |
| console.log(); |
| |
| for (let filePath of filePaths) { |
| fse.ensureDirSync( |
| path.resolve(config.releaseDestDir, path.dirname(filePath)) |
| ); |
| let destPath = path.resolve(config.releaseDestDir, filePath); |
| fs.copyFileSync(path.resolve(basePath, filePath), destPath); |
| |
| if (process.stdout.clearLine) { |
| process.stdout.clearLine(); |
| process.stdout.cursorTo(0); |
| process.stdout.write(chalk.green(`resource copied to: ${destPath}`)); |
| } else { |
| console.log(chalk.green(`resource copied to: ${destPath}`)); |
| } |
| } |
| |
| console.log('\ncopyResourcesToDest done.'); |
| } |
| |
| async function run() { |
| let config = initEnv(); |
| await copyResourcesToDest(config); |
| |
| console.log('All done.'); |
| } |
| |
| run(); |