andywer / andywer/threads.js

TypeError: Cannot read property 'resolve' of null

未关闭
#376 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
TypeScript
星标
3.5k
派生
173
PR 合并指标
30 天内没有已合并 PR

描述

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

贡献指南

这个仓库没有索引到贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。