Initial Commit
This commit is contained in:
72
public/lib/scripts/copy-assets.js
Normal file
72
public/lib/scripts/copy-assets.js
Normal file
@ -0,0 +1,72 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
// Paths
|
||||
const root = path.resolve(__dirname, '..');
|
||||
const nodeModules = path.join(root, 'node_modules');
|
||||
const pkgJsonPath = path.join(root, 'package.json');
|
||||
const assetsRoot = path.join(root, 'assets/js');
|
||||
|
||||
// Load dependencies
|
||||
const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));
|
||||
const dependencies = Object.keys(pkgJson.dependencies || {});
|
||||
|
||||
// Helpers
|
||||
function copyFile(src, dest) {
|
||||
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
||||
fs.copyFileSync(src, dest);
|
||||
console.log(`Copied file: ${src} → ${dest}`);
|
||||
}
|
||||
|
||||
function copyFolder(src, dest) {
|
||||
if (!fs.existsSync(src)) return;
|
||||
fs.mkdirSync(dest, { recursive: true });
|
||||
fs.readdirSync(src, { withFileTypes: true }).forEach(entry => {
|
||||
const srcPath = path.join(src, entry.name);
|
||||
const destPath = path.join(dest, entry.name);
|
||||
if (entry.isDirectory()) {
|
||||
copyFolder(srcPath, destPath);
|
||||
} else {
|
||||
copyFile(srcPath, destPath);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Main logic
|
||||
dependencies.forEach(pkg => {
|
||||
const pkgPath = path.join(nodeModules, pkg);
|
||||
const targetFolder = path.join(assetsRoot, pkg.replace('@', '').replace('/', '-'));
|
||||
|
||||
if (!fs.existsSync(pkgPath)) {
|
||||
console.warn(`Package not found: ${pkg}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Copy main/module files
|
||||
const depPkgJsonPath = path.join(pkgPath, 'package.json');
|
||||
if (fs.existsSync(depPkgJsonPath)) {
|
||||
const depPkg = JSON.parse(fs.readFileSync(depPkgJsonPath, 'utf-8'));
|
||||
['main', 'module'].forEach(key => {
|
||||
if (depPkg[key]) {
|
||||
const src = path.join(pkgPath, depPkg[key]);
|
||||
if (fs.existsSync(src)) {
|
||||
const dest = path.join(targetFolder, path.basename(depPkg[key]));
|
||||
copyFile(src, dest);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Copy common folders
|
||||
['dist', 'locale', 'plugin', 'webfonts', 'css'].forEach(folder => {
|
||||
const srcFolder = path.join(pkgPath, folder);
|
||||
if (fs.existsSync(srcFolder)) {
|
||||
const destFolder = path.join(targetFolder, folder);
|
||||
copyFolder(srcFolder, destFolder);
|
||||
}
|
||||
});
|
||||
|
||||
console.log(`✅ Finished processing: ${pkg}`);
|
||||
});
|
||||
|
||||
console.log('🎉 All npm assets copied into Hugo-compatible structure.');
|
Reference in New Issue
Block a user