UNPKG

tix-react-ssr

Version:

Tiket.com React Project Scripts

63 lines (55 loc) 1.71 kB
const path = require('path'); const chokidar = require('chokidar'); const { writeFile, copyFile, makeDir, cleanDir, copyDir } = require('./lib/fs'); const { format } = require('./run'); const { appPath, appPublic } = require('../config/paths'); const pkg = require(`${appPath}/package.json`); /** * Copies static files such as robots.txt, favicon.ico to the * output (build) folder. */ async function copy() { await Promise.all([ writeFile( `${appPath}/build/package.json`, JSON.stringify( { private: true, engines: pkg.engines, dependencies: pkg.dependencies, scripts: { start: 'node server.js', }, }, null, 2, ), ), copyDir(`${appPath}/public`, `${appPath}/build/public`), ]); if (process.argv.includes('--watch')) { const watcher = chokidar.watch([appPublic + '/**/*'], { ignoreInitial: true }); watcher.on('all', async (event, filePath) => { const start = new Date(); const src = path.relative('./', filePath); const dist = path.join(appPath, '/build/', src.startsWith('src') ? path.relative('src', src) : src); switch (event) { case 'add': case 'change': await makeDir(path.dirname(dist)); await copyFile(filePath, dist); break; case 'unlink': case 'unlinkDir': cleanDir(dist, { nosort: true, dot: true }); break; default: return; } const end = new Date(); const time = end.getTime() - start.getTime(); console.info(`[${format(end)}] ${event} '${dist}' after ${time} ms`); }); } } module.exports = copy;