tix-react-ssr
Version:
Tiket.com React Project Scripts
63 lines (55 loc) • 1.71 kB
JavaScript
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;