andywer / andywer/threads.js

TypeError: Cannot read property 'resolve' of null

Ouverte
#376 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
TypeScript
Étoiles
3.5k
Forks
173
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Hi,
Thank you for your library. I'd like to use it on my electron app (not using electron webpack) but I cannot get it working.

Here is the first stacktrace:
```log
Top-level unhandled promise rejection: TypeError: Cannot read property 'resolve' of null
at resolveScriptPath (/home//pro/contribs/loki-messenger/node_modules/threads/dist/master/implementation.node.js:84:26)
at new Worker (/home//pro/contribs/loki-messenger/node_modules/threads/dist/master/implementation.node.js:160:23)
at Object.doWhatYouGottaDo (/home//pro/contribs/loki-messenger/ts/workers/master.js:7:40)
[...]
```

I have my `ts` files under `/ts`
I have the worker files under `/ts/workers`

Under `/ts/workers` I have
`master.ts` and `auth.ts`

`auth.ts` :
```ts
// workers/auth.js - will be run in worker thread
// tslint:disable-next-line: no-submodule-imports
import { expose } from 'threads/worker';

expose({
hashPassword(password, salt) {
return `${password}:${salt}`;
},
});

```

`master.ts` :
```ts
import { spawn, Thread, Worker } from 'threads';

export async function doWhatYouGottaDo() {
const auth = await spawn(new Worker('./auth'));
// tslint:disable-next-line: await-promise
const hashed = await auth.hashPassword('Super secret password', '1234');
console.log('Hashed password:', hashed);
await Thread.terminate(auth);
}

doWhatYouGottaDo().catch(console.error);
```

Tthe issue comes from the require() on this line
`eval("require").resolve(makeRelative(rebaseScriptPath(scriptPath, /[\/\\]worker_threads[\/\\]/)));`

it's simply the 'require' which is not found (eval("require") = null).

I assume it comes from the tsconfig.json but I don't find what to set.
Here is my current `tsconfig.json`

```json
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
"lib": [
"dom",
"es2017"
],
"jsx": "react",
"sourceMap": true,
"rootDir": "./ts",

"strict": true,
"skipLibCheck": true,
"moduleResolution": "node",
"esModuleInterop": true
}
}
```

I think I need to change the module "commonjs" to "esnext" as you say in the [guide](https://threads.js.org/getting-started#when-using-typescript) but then my whole app fails to start with errors like `SyntaxError: Cannot use import statement outside a module`.

I thought I could just override the tsconfig.json for the workers path it doesn't seem to be picked up by tsc. I tried to add a tsconfig.json in `ts/workers` containing

```json
{
"extends": "../../tsconfig.json",

"compilerOptions": {
"module": "esnext"
}
}
```

But I still get the same `TypeError: Cannot read property 'resolve' of null `

Do you have any idea what I can do to get this working on an electron app relying on tsc and not electron-webpack?
Thanks a lot

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.