dwyl / dwyl/decache

Can not access to static property after using decache

Open
#61 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
153
Forks
12
PR merge metrics
No merged PRs in 30d

Description

On my main project, I import modules from folders automatically and at some point, I have to re-import them so I use decache. The example below simulates that what I try to do on my main project.

Firstly, I assign a new instance of `EventEmitter` to `Logger.eventEmitter`. Then, I import my event module and send a log message using `event.logger.log` and it logs successfully. After that, I decache my module and re-import it. When I try to use `logger.log` again with the re-imported module, it returns an error.

There are my codes and console output:

```js
// index.js

const { Logger } = require('./logger');
const { EventEmitter } = require('events');
const { join } = require('path');
const decache = require('decache');

const eventEmitter = new EventEmitter();
eventEmitter.on('log', message => console.log(`Log: ${message}`));
Logger.eventEmitter = eventEmitter;

const pathStr = join(__dirname, './events/testEvent.js');
const imported = require(pathStr);
imported.logger.log('Hello world');

decache(pathStr);
const imported2 = require(pathStr);
imported2.logger.log('Hello world2');
```

```js
// logger.js

class Logger {
static eventEmitter;

log(message) {
Logger.eventEmitter.emit('log', message);
}
}

module.exports = { Logger };
```

```js
// event.js

const { Logger } = require('./logger');

class Event {
logger = new Logger();
}

module.exports = { Event };
```

```js
// events/testEvent.js

const { Event } = require('../event');

const event = new Event();

module.exports = event;
```

```
Log: Hello world
C:\Users\bur4k\Desktop\test2\logger.js:5
Logger.eventEmitter.emit('log', message);
^

TypeError: Cannot read properties of undefined (reading 'emit')
at Logger.log (C:\Users\bur4k\Desktop\test2\logger.js:5:29)
at Object. (C:\Users\bur4k\Desktop\test2\index.js:16:24)
at Module._compile (node:internal/modules/cjs/loader:1254:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
at Module.load (node:internal/modules/cjs/loader:1117:32)
at Module._load (node:internal/modules/cjs/loader:958:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47

Node.js v18.15.0
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.