@mnrendra/read-stacked-file v2.0.1
@mnrendra/read-stacked-file
Read a file based on the stack trace from any subdirectory in your project.
Useful for reading files relative to the original caller — even when deeply nested. Ideal for accessing config files like package.json, .env, and more.
Install
npm i @mnrendra/read-stacked-fileUsage
readStackedFile(targetFile?, options?): Reads the stack-trace file asynchronously and returns the file data in aPromise<string>.readStackedFileSync(targetFile?, options?): Reads the stack-trace file synchronously and returns the file data in astring.
Using CommonJS:
const { readStackedFile, readStackedFileSync } = require('@mnrendra/read-stacked-file')
// Asynchronously
const readAsync = async () => {
const data = await readStackedFile('package.json')
console.log('asynchronously:', data)
}
readAsync()
// Synchronously
const readSync = () => {
const data = readStackedFileSync('package.json')
console.log('synchronously:', data)
}
readSync()Using ES Modules:
import { readStackedFile, readStackedFileSync } from '@mnrendra/read-stacked-file'
// Asynchronously
const readAsync = async () => {
const data = await readStackedFile('package.json')
console.log('asynchronously:', data)
}
readAsync()
// Synchronously
const readSync = () => {
const data = readStackedFileSync('package.json')
console.log('synchronously:', data)
}
readSync()Examples
1. Read the package.json file in your development project:
Assuming your project's ~/project-name/package.json file is as follows:
{
"name": "project-name",
"version": "1.0.0"
}This lets you read the ~/project-name/package.json file from any directory in your project.
Examples:
• Read from ~/project-name/src/index.js:
const { readStackedFileSync } = require('@mnrendra/read-stacked-file')
// Synchronously
const main = () => {
const data = readStackedFileSync('package.json')
const { name, version } = JSON.parse(data)
console.log('synchronously:', name, version) // Output: synchronously: project-name 1.0.0
}
main()• Read from ~/project-name/src/any-directory/index.mjs:
import { readStackedFile } from '@mnrendra/read-stacked-file'
// Asynchronously
const main = async () => {
const data = await readStackedFile('package.json')
const { name, version } = JSON.parse(data)
console.log('asynchronously:', name, version) // Output: asynchronously: project-name 1.0.0
}
main()2. Read the package.json file in your published module:
Assuming your module is installed in the /consumer/node_modules/module-name/ directory and the package.json file for your module located at /consumer/node_modules/module-name/package.json is as follows:
{
"name": "module-name",
"version": "1.0.0"
}This lets you access and read your module’s package.json file from any directory within the module itself.
Here are some examples:
• Read from /consumer/node_modules/module-name/dist/index.js:
"use strict";
const { readStackedFileSync } = require('@mnrendra/read-stacked-file');
// Synchronously
const main = () => {
const data = readStackedFileSync('package.json');
const { name, version } = JSON.parse(data);
console.log('synchronously:', name, version); // Output: synchronously: module-name 1.0.0
}
main();• Read from /consumer/node_modules/module-name/dist/any-directory/index.js:
"use strict";
const { readStackedFile } = require('@mnrendra/read-stacked-file');
// Asynchronously
const main = async () => {
const data = await readStackedFile('package.json');
const { name, version } = JSON.parse(data);
console.log('asynchronously:', name, version); // Output: asynchronously: module-name 1.0.0
}
main();Options
• caller
Type: (...args: any) => any
A caller function to serve as the stack-trace target.
• stackTraceLimit
Type: number
Default: 10
The Error.stackTraceLimit property specifies the number of stack frames to be collected by a stack trace.
Types
import type {
Options // The Options interface for `readStackedFile` and `readStackedFileSync`.
} from '@mnrendra/read-stacked-file'