server-renderer
Version:
library of server side render for React
81 lines (80 loc) • 3.56 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const webpack_1 = tslib_1.__importDefault(require("webpack"));
const chalk_1 = tslib_1.__importDefault(require("chalk"));
const path_1 = tslib_1.__importDefault(require("path"));
const fs_1 = tslib_1.__importDefault(require("fs"));
const FileSizeReporter_1 = tslib_1.__importDefault(require("react-dev-utils/FileSizeReporter"));
const webpack_config_1 = require("../config/webpack-config");
const config_1 = require("../config/config");
const utils_1 = require("./utils");
process.env.NODE_ENV = 'production';
const config = config_1.getConfig();
function runCompile(webpackConfig, isClient = false) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return new Promise(((resolve, reject) => {
webpack_1.default(webpackConfig).run(((err, stats) => {
if (err) {
utils_1.logError(err.message + '\n');
console.log(err + '\n');
reject();
return;
}
const { warnings, errors } = stats.toJson();
if (warnings.length) {
console.log(chalk_1.default.yellowBright('Compiled with warnings'));
warnings.forEach(warning => {
console.log(chalk_1.default.yellowBright(warning));
});
}
if (errors.length) {
utils_1.logError('Compiled with errors');
errors.forEach(utils_1.logError);
reject();
return;
}
if (isClient) {
utils_1.logSuccess('File sizes after gzip:\n');
FileSizeReporter_1.default.printFileSizesAfterBuild(stats, {
root: path_1.default.join(config.distDir, 'client'),
sizes: {},
}, path_1.default.join(config.distDir, 'client'), 300);
console.log('\n');
}
resolve();
}));
}));
});
}
function build() {
var _a, _b;
return tslib_1.__awaiter(this, void 0, void 0, function* () {
try {
utils_1.logSuccess('Start compile...');
const clientConfig = webpack_config_1.createWebpackConfig(false);
const serverConfig = webpack_config_1.createWebpackConfig(true);
// clear output directory and copy static files
const serverOutput = (_a = serverConfig.output) === null || _a === void 0 ? void 0 : _a.path;
const clientOutput = (_b = clientConfig.output) === null || _b === void 0 ? void 0 : _b.path;
utils_1.deleteDir(config.distDir);
// create output directory
fs_1.default.mkdirSync(config.distDir);
const publicDir = path_1.default.join(config.rootDir, 'public');
utils_1.copyDir(publicDir, serverOutput);
utils_1.copyDir(publicDir, clientOutput);
utils_1.logSuccess('Start to build server bundle...');
yield runCompile(serverConfig);
utils_1.logSuccess('Start to build client bundle...');
yield runCompile(clientConfig, true);
utils_1.logSuccess('Compiled successfully.');
}
catch (error) {
if (error) {
utils_1.logError(error);
}
process.exit(1);
}
});
}
build();
;