🔥
This commit is contained in:
57
tools/copy.js
Normal file
57
tools/copy.js
Normal file
@@ -0,0 +1,57 @@
|
||||
import path from 'path';
|
||||
import chokidar from 'chokidar';
|
||||
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'),
|
||||
]);
|
||||
|
||||
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;
|
||||
Reference in New Issue
Block a user