https://github.com/ahmadnassri/node-pretty-exceptions
Pretty and more helpful uncaught exceptions, automatically
https://github.com/ahmadnassri/node-pretty-exceptions
lib node
Last synced: 6 months ago
JSON representation
Pretty and more helpful uncaught exceptions, automatically
- Host: GitHub
- URL: https://github.com/ahmadnassri/node-pretty-exceptions
- Owner: ahmadnassri
- License: mit
- Created: 2017-04-01T08:19:44.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2024-06-17T20:01:41.000Z (12 months ago)
- Last Synced: 2024-12-10T00:51:54.221Z (6 months ago)
- Topics: lib, node
- Language: JavaScript
- Homepage:
- Size: 1.4 MB
- Stars: 26
- Watchers: 3
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Pretty Exceptions
Pretty and more helpful uncaught exceptions, automatically.
[![license][license-img]][license-url]
[![release][release-img]][release-url]
[![semantic][semantic-img]][semantic-url]![][1]
## Usage
### Library
``` js
const pretty = require('pretty-exceptions/lib')const options = {
source: true,
native: true,
color: true,
cwd: process.cwd()
}const output = pretty(new Error('foo'), options)
```#### `options`
| name | type | required | default | description |
|------------|-----------|----------|-----------------|------------------------------------------|
| **source** | `Boolean` | ✖ | `false` | Show source code in stack |
| **native** | `Boolean` | ✖ | `false` | Show native code in stack |
| **color** | `Boolean` | ✖ | `true` | use ansi colors |
| **cwd** | `String` | ✖ | `process.cwd()` | resolve file names relative to this path |### CLI *(preferred)*
This is the preferred approach to best avoid mistakingly including into production builds
1. setup your [`NODE_PATH`][] environment variable
``` shell
export NODE_PATH="$NODE_PATH:$(npm root -g)"
```2. install `pretty-exceptions`
``` shell
npm install --global pretty-exceptions
```3. run your application with the [`--require`][] flag:
``` shell
node --require pretty-exceptions my-app.js# alternative modes (see below):
node --require pretty-exceptions/source my-app.js
```#### Pro Tip:
Use Bash Aliases for less typing
``` shell
# make a special alias for debugging
alias node-ex='node --require pretty-exceptions'# or even better:
alias node='node --require pretty-exceptions/source'
```> To make this persistent, you need to add this into your `~/.bashrc` *(or `~/.bash_profile`)*.
#### Environment Variables
| env | default | description |
|----------------------------|---------|---------------------------|
| `PRETTY_EXCEPTIONS_SOURCE` | `0` | Show source code in stack |
| `PRETTY_EXCEPTIONS_NATIVE` | `0` | Show native code in stack |
| `PRETTY_EXCEPTIONS_COLOR` | `1` | use ansi colors |### Source *(if you really must!)*
Require at the top-most entry point of your app:
``` js
require('pretty-exceptions')// alternative modes (see below):
require('pretty-exceptions/source-native')
```## Modes
### Default
``` shell
$ node --require pretty-exceptions my-app.js
```###### Output
``` plain
Error: oh no! this is an error message!
│
└┬╼ /path/to/my-app.js
│
├──╼ someOtherFunction @ line 2:27
├──╼ someFunction @ line 6:3
└──╼ Object. @ line 9:1
```###### Demo
> Colors will vary based on your local terminal configuration
![][2]
### View Source
``` shell
$ node --require pretty-exceptions/source my-app.js
# OR
$ PRETTY_EXCEPTIONS_SOURCE=1 node --require pretty-exceptions my-app.js
```###### Output
``` plain
Error: oh no! this is an error message!
│
└┬╼ /path/to/my-app.js
│
├──╼ someOtherFunction @ line 2
│
│ function someOtherFunction () {
├╌╌╌╌╌╌╌╌╌╌╮
│ throw new Error('oh no! this is an error message!')
│ }
│
├──╼ someFunction @ line 6
│
│ function someFunction () {
├╌╌╌╌╮
│ someOtherFunction()
│ }
│
├──╼ Object. @ line 9
│
└╌╌╌╌╮
someFunction()
```###### Demo
> Colors will vary based on your local terminal configuration
![][3]
### View Native Calls
``` shell
$ node --require pretty-exceptions/native my-app.js
# OR
$ PRETTY_EXCEPTIONS_NATIVE=true node --require pretty-exceptions my-app.js
```###### Output
``` plain
Error: oh no! this is an error message!
│
├─┬╼ /path/to/my-app.js
│ │
│ ├──╼ someOtherFunction @ line 2:27
│ ├──╼ someFunction @ line 6:3
│ └──╼ Object. @ line 9:1
│
├─┬╼ module.js
│ │
│ ├──╼ Module._compile @ line 571:32
│ ├──╼ Object.Module._extensions..js @ line 580:10
│ ├──╼ Module.load @ line 488:32
│ ├──╼ tryModuleLoad @ line 447:12
│ ├──╼ Function.Module._load @ line 439:3
│ └──╼ Module.runMain @ line 605:10
│
└┬╼ bootstrap_node.js
│
└──╼ run @ line 423:7
```###### Demo
> Colors will vary based on your local terminal configuration
![][4]
### View Source & Native
``` shell
$ node --require pretty-exceptions/source-native my-app.js
# OR
$ PRETTY_EXCEPTIONS_SOURCE=1 PRETTY_EXCEPTIONS_NATIVE=1 node --require pretty-exceptions my-app.js
```###### Output
``` plain
Error: oh no! this is an error message!
│
├─┬╼ /path/to/my-app.js
│ │
│ ├──╼ someOtherFunction @ line 2
│ │
│ │ function someOtherFunction () {
│ ├╌╌╌╌╌╌╌╌╌╌╮
│ │ throw new Error('oh no! this is an error message!')
│ │ }
│ │
│ ├──╼ someFunction @ line 6
│ │
│ │ function someFunction () {
│ ├╌╌╌╌╮
│ │ someOtherFunction()
│ │ }
│ │
│ ├──╼ Object. @ line 9
│ │
│ └╌╌╌╌╮
│ someFunction()
│
│
├─┬╼ module.js
│ │
│ ├──╼ Module._compile @ line 571
│ ├──╼ Object.Module._extensions..js @ line 580
│ ├──╼ Module.load @ line 488
│ ├──╼ tryModuleLoad @ line 447
│ ├──╼ Function.Module._load @ line 439
│ └──╼ Module.runMain @ line 605
│
└┬╼ bootstrap_node.js
│
└──╼ run @ line 423
```###### Demo
> Colors will vary based on your local terminal configuration
![][5]
[1]: ./screenshots/example.png
[`NODE_PATH`]: https://nodejs.org/docs/latest/api/modules.html#modules_loading_from_the_global_folders
[`--require`]: https://nodejs.org/api/cli.html#cli_r_require_module
[2]: ./screenshots/default.png
[3]: ./screenshots/source.png
[4]: ./screenshots/native.png
[5]: ./screenshots/source-native.png----
> Author: [Ahmad Nassri](https://www.ahmadnassri.com/) •
> Twitter: [@AhmadNassri](https://twitter.com/AhmadNassri)[license-url]: LICENSE
[license-img]: https://badgen.net/github/license/ahmadnassri/node-pretty-exceptions[release-url]: https://github.com/ahmadnassri/node-pretty-exceptions/releases
[release-img]: https://badgen.net/github/release/ahmadnassri/node-pretty-exceptions[semantic-url]: https://github.com/ahmadnassri/node-pretty-exceptions/actions?query=workflow%3Arelease
[semantic-img]: https://badgen.net/badge/📦/semantically%20released/blue