Base Framework
The `base` package, with its current stable version 3.0.0, is an open-source framework designed to provide a minimal and highly composable foundation for building server-side Node.js applications. It emphasizes modularity through a plugin-based architecture, allowing developers to extend its core functionality—which includes methods like `.set`, `.get`, `.has`, `.define`, and `.use`—with custom features or community plugins. A key design principle is a compact API surface, aiming for ease of learning and use, while encouraging unit testability and a Node.js core-style approach without excessive API sugar. Despite its architectural benefits for creating extensible applications, the project appears to be no longer actively maintained, with the last significant release and code contributions dating back over six years. This lack of recent updates means that while the principles are sound, users should consider the implications of using an unmaintained framework for new development, particularly regarding security patches or compatibility with newer Node.js versions.
Common errors
-
TypeError: Base is not a constructor
cause Attempting to instantiate Base (e.g., `new Base()`) when the import or require statement failed to correctly load the constructor, or when using an incorrect import style for a CommonJS module.fixEnsure you are using `const Base = require('base');` at the top of your file. Verify that 'base' is correctly installed in `node_modules`. -
ReferenceError: require is not defined
cause This error typically occurs when trying to use `require` in a JavaScript module that is being treated as an ES module (e.g., in a file with `.mjs` extension or when `type: 'module'` is set in `package.json`).fixFor the 'base' package, ensure your file is treated as a CommonJS module (e.g., `.js` extension without `type: 'module'` in `package.json`). If your project is ESM, you might consider dynamically importing it (`const Base = await import('base')`) but this is less common for this package.
Warnings
- breaking The 'base' package has been abandoned for over six years, with its last release (v3.0.0) dating back to 2018. This means it receives no further updates, bug fixes, or security patches. Using it in new projects may expose applications to unaddressed vulnerabilities or compatibility issues with newer Node.js versions and ecosystem libraries.
- gotcha Due to the project's abandonment, a detailed migration guide for the major version jump from 0.x to 3.x is not readily available. Users upgrading from older versions may encounter undocumented breaking changes in API surface, plugin contracts, or expected behavior, requiring manual investigation of source code or trial-and-error.
- gotcha The package primarily uses CommonJS module syntax (`require`). Attempting to import it using ES module syntax (`import`) in an ES module context may lead to runtime errors (e.g., `require is not defined`) or require specific loader/bundler configurations, which might not be well-documented for this abandoned package.
Install
-
npm install base -
yarn add base -
pnpm add base
Imports
- Base
import { Base } from 'base'const Base = require('base')
Quickstart
const Base = require('base');
// 1. Create a new Base instance
const app = new Base();
console.log('Base application initialized.');
// 2. Use core methods: set, get, has
app.set('greeting', 'Hello, Base!');
console.log(`App greeting: ${app.get('greeting')}`);
if (app.has('greeting')) {
console.log('The "greeting" property exists.');
}
// 3. Define a non-enumerable property
app.define('version', '3.0.0');
console.log(`App version (non-enumerable): ${app.version}`);
for (const key in app) {
if (Object.prototype.hasOwnProperty.call(app, key)) {
console.log(`Enumerable property: ${key}`);
}
}
// 4. Demonstrate a simple plugin
function myLoggerPlugin(instance) {
instance.log = function(message) {
console.log(`[MyLoggerPlugin] ${message}`);
};
instance.log('Logger plugin activated.');
}
// Use the plugin
app.use(myLoggerPlugin);
app.log('This message is logged via the plugin.');
// 5. Extend Base to create a custom application class
function MyApp() {
Base.call(this); // Call Base constructor
this.name = 'My Custom App';
}
Base.extend(MyApp); // Inherit Base methods
const myAppInstance = new MyApp();
myAppInstance.set('owner', 'Registry AI');
console.log(`${myAppInstance.name} owner: ${myAppInstance.get('owner')}`);
// This snippet demonstrates initialization, basic data storage, non-enumerable properties,
// plugin integration, and inheritance, covering core functionalities of the Base framework.
// It is written in CommonJS, typical for the era of this package.