68 lines
1.9 KiB
JavaScript
68 lines
1.9 KiB
JavaScript
import path from 'path';
|
|
import chokidar from 'chokidar';
|
|
import { exec } from 'child_process';
|
|
import { writeFile, copyFile, makeDir, copyDir, cleanDir } from './lib/fs';
|
|
import pkg from '../package.json';
|
|
import { format } from './run';
|
|
|
|
/**
|
|
* Copies static files such as robots.txt, favicon.ico to the
|
|
* output (build) folder.
|
|
*/
|
|
async function copy() {
|
|
await makeDir('build');
|
|
await Promise.all([
|
|
writeFile('build/package.json', JSON.stringify({
|
|
private: true,
|
|
engines: pkg.engines,
|
|
dependencies: pkg.dependencies,
|
|
scripts: {
|
|
start: 'node server.js',
|
|
},
|
|
}, null, 2)),
|
|
copyFile('LICENSE.txt', 'build/LICENSE.txt'),
|
|
copyDir('src/content', 'build/content'),
|
|
copyDir('public', 'build/public'),
|
|
]);
|
|
await exec('git log -n 1 --pretty=format:"%H"', (err, stdout) => {
|
|
if (stdout) {
|
|
writeFile('build/public/config.json', JSON.stringify({
|
|
build: {
|
|
hash: stdout,
|
|
time: new Date(),
|
|
},
|
|
}, null, 2));
|
|
}
|
|
});
|
|
if (process.argv.includes('--watch')) {
|
|
const watcher = chokidar.watch([
|
|
'src/content/**/*',
|
|
'public/**/*',
|
|
], { ignoreInitial: true });
|
|
|
|
watcher.on('all', async (event, filePath) => {
|
|
const start = new Date();
|
|
const src = path.relative('./', filePath);
|
|
const dist = path.join('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.log(`[${format(end)}] ${event} '${dist}' after ${time} ms`);
|
|
});
|
|
}
|
|
}
|
|
|
|
export default copy;
|