diff --git a/package.json b/package.json index 761e9e0..5adc73b 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,8 @@ "f2elint": "^2.0.1", "husky": "^7.0.4", "lerna": "^4.x", - "typescript": "^3.2.2" + "typescript": "^3.2.2", + "webpack": "^5.90.3" }, "engines": { "node": ">=14.0.0" @@ -56,4 +57,4 @@ "@builder/babel-preset-ice": "1.0.1" }, "repository": "https://github.com/alibaba/lowcode-plugins.git" -} \ No newline at end of file +} diff --git a/packages/plugin-multiple-editor/scripts/build.js b/packages/plugin-multiple-editor/scripts/build.js index a15ed89..48d677c 100644 --- a/packages/plugin-multiple-editor/scripts/build.js +++ b/packages/plugin-multiple-editor/scripts/build.js @@ -1,195 +1,224 @@ process.env.BABEL_ENV = 'production'; process.env.NODE_ENV = 'production'; +// process.env.CI = 'false'; process.on('unhandledRejection', err => { + console.log(err); throw err; }); -// Ensure environment variables are read. -require('../config/env'); - -const path = require('path'); -const chalk = require('react-dev-utils/chalk'); -const fs = require('fs-extra'); -const bfj = require('bfj'); -const webpack = require('webpack'); -const configFactory = require('../config/webpack.config'); -const paths = require('../config/paths'); -const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles'); -const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages'); -const printHostingInstructions = require('react-dev-utils/printHostingInstructions'); -const FileSizeReporter = require('react-dev-utils/FileSizeReporter'); -const printBuildError = require('react-dev-utils/printBuildError'); - -const measureFileSizesBeforeBuild = +try { + console.log('Building the plugin-multiple-editor...'); + // Ensure environment variables are read. + require('../config/env'); + + const path = require('path'); + const chalk = require('react-dev-utils/chalk'); + const fs = require('fs-extra'); + const bfj = require('bfj'); + const webpack = require('webpack'); + const configFactory = require('../config/webpack.config'); + const paths = require('../config/paths'); + const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles'); + const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages'); + const printHostingInstructions = require('react-dev-utils/printHostingInstructions'); + const FileSizeReporter = require('react-dev-utils/FileSizeReporter'); + const printBuildError = require('react-dev-utils/printBuildError'); + + const measureFileSizesBeforeBuild = FileSizeReporter.measureFileSizesBeforeBuild; -const printFileSizesAfterBuild = FileSizeReporter.printFileSizesAfterBuild; -const useYarn = fs.existsSync(paths.yarnLockFile); + const printFileSizesAfterBuild = FileSizeReporter.printFileSizesAfterBuild; + const useYarn = fs.existsSync(paths.yarnLockFile); -// These sizes are pretty large. We'll warn for bundles exceeding them. -const WARN_AFTER_BUNDLE_GZIP_SIZE = 512 * 1024; -const WARN_AFTER_CHUNK_GZIP_SIZE = 1024 * 1024; + // These sizes are pretty large. We'll warn for bundles exceeding them. + const WARN_AFTER_BUNDLE_GZIP_SIZE = 512 * 1024; + const WARN_AFTER_CHUNK_GZIP_SIZE = 1024 * 1024; -const isInteractive = process.stdout.isTTY; + const isInteractive = process.stdout.isTTY; -// Warn and crash if required files are missing -if (!checkRequiredFiles([paths.appHtml, paths.appIndexJs])) { - process.exit(1); -} - -const argv = process.argv.slice(2); -const writeStatsJson = argv.indexOf('--stats') !== -1; - -// Generate configuration -const config = configFactory('production'); - -const { checkBrowsers } = require('react-dev-utils/browsersHelper'); -checkBrowsers(paths.appPath, isInteractive) - .then(() => { - return measureFileSizesBeforeBuild(paths.appBuild); - }) - .then(previousFileSizes => { - fs.emptyDirSync(paths.appBuild); - return build(previousFileSizes); - }) - .then( - ({ stats, previousFileSizes, warnings }) => { - if (warnings.length) { - console.log(chalk.yellow('Compiled with warnings.\n')); - console.log(warnings.join('\n\n')); - console.log( - '\nSearch for the ' + - chalk.underline(chalk.yellow('keywords')) + - ' to learn more about each warning.' - ); - console.log( - 'To ignore, add ' + - chalk.cyan('// eslint-disable-next-line') + - ' to the line before.\n' - ); - } else { - console.log(chalk.green('Compiled successfully.\n')); - } - - console.log('File sizes after gzip:\n'); - printFileSizesAfterBuild( - stats, - previousFileSizes, - paths.appBuild, - WARN_AFTER_BUNDLE_GZIP_SIZE, - WARN_AFTER_CHUNK_GZIP_SIZE - ); - console.log(); - - const appPackage = require(paths.appPackageJson); - const publicUrl = paths.publicUrlOrPath; - const publicPath = config.output.publicPath; - const buildFolder = path.relative(process.cwd(), paths.appBuild); - printHostingInstructions( - appPackage, - publicUrl, - publicPath, - buildFolder, - useYarn - ); - }, - err => { - const tscCompileOnError = process.env.TSC_COMPILE_ON_ERROR === 'true'; - if (tscCompileOnError) { - console.log( - chalk.yellow( - 'Compiled with the following type errors (you may want to check these before deploying your app):\n' - ) - ); - printBuildError(err); - } else { - console.log(chalk.red('Failed to compile.\n')); - printBuildError(err); - process.exit(1); - } - } - ) - .catch(err => { - if (err && err.message) { - console.log(err.message); - } + // Warn and crash if required files are missing + if (!checkRequiredFiles([paths.appHtml, paths.appIndexJs])) { process.exit(1); - }); - -// Create the production build and print the deployment instructions. -function build(previousFileSizes) { - console.log('Creating an optimized production build...'); - - const compiler = webpack(config); - return new Promise((resolve, reject) => { - compiler.run((err, stats) => { - let messages; - if (err) { - if (!err.message) { - return reject(err); - } - - let errMessage = err.message; - - // Add additional information for postcss errors - if (Object.prototype.hasOwnProperty.call(err, 'postcssNode')) { - errMessage += - '\nCompileError: Begins at CSS selector ' + - err['postcssNode'].selector; + } + + const argv = process.argv.slice(2); + const writeStatsJson = argv.indexOf('--stats') !== -1; + + // Generate configuration + const config = configFactory('production'); + + const { checkBrowsers } = require('react-dev-utils/browsersHelper'); + checkBrowsers(paths.appPath, isInteractive) + .then(() => { + console.log('Creating an optimized production build...'); + return measureFileSizesBeforeBuild(paths.appBuild); + }) + .then(previousFileSizes => { + console.log('Removing the build folder...'); + fs.emptyDirSync(paths.appBuild); + return build(previousFileSizes); + }) + .then( + ({ stats, previousFileSizes, warnings }) => { + console.log('File sizes after gzip:\n'); + if (warnings.length) { + console.log(chalk.yellow('Compiled with warnings.\n')); + console.log(warnings.join('\n\n')); + console.log( + '\nSearch for the ' + + chalk.underline(chalk.yellow('keywords')) + + ' to learn more about each warning.' + ); + console.log( + 'To ignore, add ' + + chalk.cyan('// eslint-disable-next-line') + + ' to the line before.\n' + ); + } else { + console.log(chalk.green('Compiled successfully.\n')); } - messages = formatWebpackMessages({ - errors: [errMessage], - warnings: [], - }); - } else { - messages = formatWebpackMessages( - stats.toJson({ all: false, warnings: true, errors: true }) + console.log('File sizes after gzip:\n'); + printFileSizesAfterBuild( + stats, + previousFileSizes, + paths.appBuild, + WARN_AFTER_BUNDLE_GZIP_SIZE, + WARN_AFTER_CHUNK_GZIP_SIZE ); - } - if (messages.errors.length) { - // Only keep the first error. Others are often indicative - // of the same problem, but confuse the reader with noise. - if (messages.errors.length > 1) { - messages.errors.length = 1; - } - return reject(new Error(messages.errors.join('\n\n'))); - } - if ( - process.env.CI && - (typeof process.env.CI !== 'string' || - process.env.CI.toLowerCase() !== 'false') && - messages.warnings.length - ) { - // Ignore sourcemap warnings in CI builds. See #8227 for more info. - const filteredWarnings = messages.warnings.filter( - w => !/Failed to parse source map/.test(w) + console.log(); + + const appPackage = require(paths.appPackageJson); + const publicUrl = paths.publicUrlOrPath; + const publicPath = config.output.publicPath; + const buildFolder = path.relative(process.cwd(), paths.appBuild); + printHostingInstructions( + appPackage, + publicUrl, + publicPath, + buildFolder, + useYarn ); - if (filteredWarnings.length) { + }, + err => { + const tscCompileOnError = process.env.TSC_COMPILE_ON_ERROR === 'true'; + console.log(chalk.red('Failed to compile.\n')); + if (tscCompileOnError) { console.log( chalk.yellow( - '\nTreating warnings as errors because process.env.CI = true.\n' + - 'Most CI servers set it automatically.\n' + 'Compiled with the following type errors (you may want to check these before deploying your app):\n' ) ); - return reject(new Error(filteredWarnings.join('\n\n'))); + printBuildError(err); + } else { + console.log(chalk.red('Failed to compile.\n')); + printBuildError(err); + process.exit(1); } } - - const resolveArgs = { - stats, - previousFileSizes, - warnings: messages.warnings, - }; - - if (writeStatsJson) { - return bfj - .write(paths.appBuild + '/bundle-stats.json', stats.toJson()) - .then(() => resolve(resolveArgs)) - .catch(error => reject(new Error(error))); + ) + .catch(err => { + if (err && err.message) { + console.log(err.message); + console.log(err); } + process.exit(1); + }); - return resolve(resolveArgs); + // Create the production build and print the deployment instructions. + function build(previousFileSizes) { + console.log('Creating an optimized production build...'); + + const compiler = webpack(config); + console.log('compiler') + return new Promise((resolve, reject) => { + try { + compiler.run((err, stats) => { + console.log('compiler.run') + let messages; + if (err) { + console.log(err); + + if (!err.message) { + return reject(err); + } + + let errMessage = err.message; + + // Add additional information for postcss errors + if (Object.prototype.hasOwnProperty.call(err, 'postcssNode')) { + errMessage += + '\nCompileError: Begins at CSS selector ' + + err['postcssNode'].selector; + } + + messages = formatWebpackMessages({ + errors: [errMessage], + warnings: [], + }); + } else { + messages = formatWebpackMessages( + stats.toJson({ all: false, warnings: true, errors: true }) + ); + } + if (messages.errors.length) { + // Only keep the first error. Others are often indicative + // of the same problem, but confuse the reader with noise. + if (messages.errors.length > 1) { + messages.errors.length = 1; + } + return reject(new Error(messages.errors.join('\n\n'))); + } + console.log('process.env.CI', process.env.CI, process.env.CI && + (typeof process.env.CI !== 'string' || + process.env.CI.toLowerCase() !== 'false') && + messages.warnings.length) + if ( + process.env.CI && + (typeof process.env.CI !== 'string' || + process.env.CI.toLowerCase() !== 'false') && + messages.warnings.length + ) { + // Ignore sourcemap warnings in CI builds. See #8227 for more info. + const filteredWarnings = messages.warnings.filter( + w => !/Failed to parse source map/.test(w) + ); + if (filteredWarnings.length) { + console.log( + chalk.yellow( + '\nTreating warnings as errors because process.env.CI = true.\n' + + 'Most CI servers set it automatically.\n' + ) + ); + console.log(filteredWarnings, messages, messages.warnings); + return reject(new Error(filteredWarnings.join('\n\n'))); + } + } + + const resolveArgs = { + stats, + previousFileSizes, + warnings: messages.warnings, + }; + + if (writeStatsJson) { + return bfj + .write(paths.appBuild + '/bundle-stats.json', stats.toJson()) + .then(() => resolve(resolveArgs)) + .catch(error => reject(new Error(error))); + } + + return resolve(resolveArgs); + }); + } catch(err) { + console.log(chalk.red('Failed to compile.\n')); + console.log(err); + process.exit(1); + } }); - }); + } +} catch(err) { + console.log(chalk.red('Failed to compile.\n')); + console.log(err); + process.exit(1); } \ No newline at end of file diff --git a/packages/plugin-multiple-editor/scripts/start.js b/packages/plugin-multiple-editor/scripts/start.js index 4104798..877e182 100644 --- a/packages/plugin-multiple-editor/scripts/start.js +++ b/packages/plugin-multiple-editor/scripts/start.js @@ -8,6 +8,7 @@ process.env.NODE_ENV = 'development'; // ignoring them. In the future, promise rejections that are not handled will // terminate the Node.js process with a non-zero exit code. process.on('unhandledRejection', err => { + console.log(err); throw err; }); @@ -150,5 +151,6 @@ checkBrowsers(paths.appPath, isInteractive) if (err && err.message) { console.log(err.message); } + console.log(err); process.exit(1); });