运行 在 nodejs 上使用 typescript (ts-node) 的线程工作者
Running thread workers with typescript (ts-node) on nodejs
使用节点 v14,带有 ts-node v10.0.0 的打字稿
这里我要将一些工作交给工人。
const { Worker } = require('worker_threads')
console.log(process.pid)
function offloadToThread(workerData) {
return new Promise((resolve, reject) => {
const worker = new Worker('./fib.ts', { workerData });
worker.on('message', resolve);
worker.on('error', reject);
worker.on('exit', (code) => {
if (code !== 0)
reject(new Error(
`Stopped the Worker Thread with the exit code: ${code}`));
})
})
}
async function run() {
// trying to create 1000 threads
for (let i = 1; i <= 20; i++) {
// find fibonacci from 1-20 and then repeat the process.
offloadToThread(i % 20).then(r => { console.log(r, i) });
}
}
run().catch(e => console.error(e))
这里,编译后,代码无法选择正确的js文件名,显然是硬编码的。
我想知道为什么 nodejs 团队没有研究这个并让它像我们用来导入模块一样处理文件
require('/my-modules/1') // does not require js at the end
但下面的代码需要一个有效的 .js 文件
const worker = new Worker('./fib.js', { workerData }); // needs .js extension
在 typescript 编译为 js 后,有什么方法可以解析文件名?
在 ts-node 版本 10.0.0 上测试
如果文件名在 ts-node
下 运行,则此方法将解析文件名
let fileResolver = function(filename:string){
// @ts-ignore // check if code is not running under ts-node
if (!process[Symbol.for("ts-node.register.instance")]) {
return filename.replace('.ts','.js');
}
return filename;
}
使用节点 v14,带有 ts-node v10.0.0 的打字稿
这里我要将一些工作交给工人。
const { Worker } = require('worker_threads')
console.log(process.pid)
function offloadToThread(workerData) {
return new Promise((resolve, reject) => {
const worker = new Worker('./fib.ts', { workerData });
worker.on('message', resolve);
worker.on('error', reject);
worker.on('exit', (code) => {
if (code !== 0)
reject(new Error(
`Stopped the Worker Thread with the exit code: ${code}`));
})
})
}
async function run() {
// trying to create 1000 threads
for (let i = 1; i <= 20; i++) {
// find fibonacci from 1-20 and then repeat the process.
offloadToThread(i % 20).then(r => { console.log(r, i) });
}
}
run().catch(e => console.error(e))
这里,编译后,代码无法选择正确的js文件名,显然是硬编码的。
我想知道为什么 nodejs 团队没有研究这个并让它像我们用来导入模块一样处理文件
require('/my-modules/1') // does not require js at the end
但下面的代码需要一个有效的 .js 文件
const worker = new Worker('./fib.js', { workerData }); // needs .js extension
在 typescript 编译为 js 后,有什么方法可以解析文件名?
在 ts-node 版本 10.0.0 上测试
如果文件名在 ts-node
下 运行,则此方法将解析文件名let fileResolver = function(filename:string){
// @ts-ignore // check if code is not running under ts-node
if (!process[Symbol.for("ts-node.register.instance")]) {
return filename.replace('.ts','.js');
}
return filename;
}