A simple utility for iterating over folders and files and importing modules from those files. An abstraction over for-loops approach of loading files and folders. Syntactic sugar for iterating and loading folders and files.
npm install file-folder-loader
import * as nodeUrl from "node:url";
import * as nodePath from "node:path";
import { getFolders, loadFolders } from "file-folder-loader";
function getDirname(moduleAbsoluteFileUrl) {
const fileName = nodeUrl.fileURLToPath(moduleAbsoluteFileUrl);
return nodePath.dirname(fileName);
}
async function init() {
const dirPath = nodePath.join(getDirname(import.meta.url), "someDirectory");
const folderPaths = await getFolders(dirPath);
if (folderPaths.length > 0) {
await loadFolders(folderPaths, async (folderPath, folderName) => {
console.log(`Loaded folder ${folderName} from path: ${folderPath}`);
});
}
}
await init();
import * as nodeUrl from "node:url";
import * as nodePath from "node:path";
import { getModules, loadModules } from "file-folder-loader";
function getDirname(moduleAbsoluteFileUrl) {
const fileName = nodeUrl.fileURLToPath(moduleAbsoluteFileUrl);
return nodePath.dirname(fileName);
}
async function init() {
const dirPath = nodePath.join(getDirname(import.meta.url), "someDirectory");
const modulePaths = await getModules(dirPath);
if (modulePaths.length > 0) {
await loadModules(modulePaths, async (moduleExport, moduleFileUrlHref, moduleFileName) => {
console.log(`Loaded module ${moduleFileName} from path: ${moduleFileUrlHref}`);
console.log(`Module export:`, moduleExport);
});
}
}
await init();
import * as nodeUrl from "node:url";
import * as nodePath from "node:path";
import { getFolders, getModules, loadFolders, loadModules } from "file-folder-loader";
function getDirname(moduleAbsoluteFileUrl) {
const fileName = nodeUrl.fileURLToPath(moduleAbsoluteFileUrl);
return nodePath.dirname(fileName);
}
async function init() {
const dirPath = nodePath.join(getDirname(import.meta.url), "someDirectory");
// Recursive = false by default
const folderPaths = await getFolders(dirPath);
if (folderPaths.length > 0) {
await loadFolders(folderPaths, async (folderPath, folderName) => {
console.log(`Loaded folder ${folderName} from path: ${folderPath}`);
// Recursive = false by default
const modulePaths = await getModules(folderPath, false);
if (modulePaths.length > 0) {
await loadModules(modulePaths, async (moduleExport, moduleFileUrlHref, moduleFileName) => {
console.log(`Loaded module ${moduleFileName} from path: ${moduleFileUrlHref}`);
// moduleExport will be null because isImportEnabled is false (true by default)
console.log(`Module export:`, moduleExport);
}, { isImportEnabled: false });
}
}, { processMode: "sequential" });
}
}
await init();
- Discord Bots: Load folders and files dynamically,
- Modular Applications: Load user-defined files and folders dynamically.
- TypeScript - Programming language, a superset of JavaScript
- JavaScript - Programming language
- Node.js - JavaScript runtime
- eslint - Code linting
- prettier - Code formatting
- commitlint - Enforcing commit message conventions
- semantic-release - Automated versioning and releases