gulp: init, bundle src/bin/* scripts to dist/
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,2 +1,4 @@
|
|||||||
out
|
out
|
||||||
node_modules
|
node_modules
|
||||||
|
|
||||||
|
dist/
|
||||||
80
gulpfile.js
Normal file
80
gulpfile.js
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
import { readdir } from 'fs/promises';
|
||||||
|
import { spawn } from 'child_process';
|
||||||
|
import path from 'path';
|
||||||
|
import { fileURLToPath } from 'url';
|
||||||
|
import * as gulp from 'gulp';
|
||||||
|
import { rm } from 'fs/promises';
|
||||||
|
|
||||||
|
// Get the current file's directory
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = path.dirname(__filename);
|
||||||
|
|
||||||
|
// Define input and output directories
|
||||||
|
const SRC_DIR = path.join(__dirname, 'src');
|
||||||
|
const BIN_DIR = path.join(SRC_DIR, 'bin');
|
||||||
|
const DIST_DIR = path.join(__dirname, 'dist');
|
||||||
|
|
||||||
|
// Function to bundle a single file using esbuild
|
||||||
|
async function buildFile(entryFile) {
|
||||||
|
const outputFile = path.join(
|
||||||
|
DIST_DIR,
|
||||||
|
path.basename(entryFile).replace(/\.ts$/, '.mjs')
|
||||||
|
);
|
||||||
|
console.log(`Building: ${entryFile} → ${outputFile}`);
|
||||||
|
|
||||||
|
// Define the esbuild command and arguments
|
||||||
|
const command = 'esbuild';
|
||||||
|
const args = [
|
||||||
|
entryFile,
|
||||||
|
'--bundle',
|
||||||
|
'--platform=node',
|
||||||
|
'--format=esm',
|
||||||
|
'--minify',
|
||||||
|
'--outfile=' + outputFile,
|
||||||
|
];
|
||||||
|
|
||||||
|
// Execute the esbuild command as a child process
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const child = spawn(command, args, { stdio: 'inherit' });
|
||||||
|
child.on('close', code => {
|
||||||
|
if (code === 0) {
|
||||||
|
resolve();
|
||||||
|
} else {
|
||||||
|
reject(new Error(`Build failed for ${entryFile} with exit code ${code}`));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get all files in the src/bin directory
|
||||||
|
async function getEntryFiles() {
|
||||||
|
const files = await readdir(BIN_DIR);
|
||||||
|
return files.map(file => path.join(BIN_DIR, file));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build all entry files
|
||||||
|
async function buildAll() {
|
||||||
|
const entryFiles = await getEntryFiles();
|
||||||
|
for (const entry of entryFiles) {
|
||||||
|
await buildFile(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clean the output directory
|
||||||
|
async function clean() {
|
||||||
|
try {
|
||||||
|
console.log(`Cleaning dist directory: ${DIST_DIR}`);
|
||||||
|
await rm(DIST_DIR, { recursive: true, force: true });
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error cleaning dist directory:', err.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Watch for file changes and rebuild
|
||||||
|
export function watch() {
|
||||||
|
console.log('Watching for changes...');
|
||||||
|
gulp.watch(SRC_DIR + '/**/*', gulp.series(clean, buildAll));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Export tasks for Gulp
|
||||||
|
export default gulp.series(clean, buildAll); // Default task
|
||||||
2753
package-lock.json
generated
2753
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -4,11 +4,13 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^20.14.2",
|
"@types/node": "^20.14.2",
|
||||||
"@types/yargs": "^17.0.33",
|
"@types/yargs": "^17.0.33",
|
||||||
|
"gulp": "^5.0.0",
|
||||||
"typescript": "^5.5.2"
|
"typescript": "^5.5.2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"watch": "tsc -w",
|
"watch": "tsc -w",
|
||||||
"compile": "tsc"
|
"compile": "tsc",
|
||||||
|
"gulp": "gulp"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"yargs": "^17.7.2"
|
"yargs": "^17.7.2"
|
||||||
|
|||||||
Reference in New Issue
Block a user