Javascript 节点工作线程可以';不加载外部模块?

Javascript 节点工作线程可以';不加载外部模块?,javascript,node.js,concurrency,Javascript,Node.js,Concurrency,我正在尝试在我的服务器上多线程处理cpu密集型作业。我正在使用webworker线程 Server.js:(相关部分) plainworker.js: var _ = require('underscore'); ///////////// <---- PROBLEM LINE function fibo (n) { return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1; } onmessage = funct

我正在尝试在我的服务器上多线程处理cpu密集型作业。我正在使用webworker线程

Server.js:(相关部分)

plainworker.js:

var _ = require('underscore'); ///////////// <---- PROBLEM LINE

function fibo (n) {
          return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
        }
onmessage = function (event) {
  postMessage(fibo(event.data));
}
importScripts('./node_modules/underscore/underscore.js');

function fibo (n) {
          return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
        }
onmessage = function (event) {
  postMessage(fibo(event.data));
}
var\uxAE=require('下划线');//1.fibo(n-1)+fibo(n-2):1;
}
onmessage=函数(事件){
postMessage(fibo(event.data));
}
所以我注意到,如果在我的plainworker.js文件中加载了一个模块,那么它就会崩溃并停止。如果我删除这一行,那么一切都正常。问题是,我想在我的工作人员中使用下划线


是否有人拥有threads-a-gogo或webworker线程的经验,并能告诉我他们是否已成功地在工作线程中加载了外部模块?

看起来我必须使用“importScripts(..)”函数(),因为require似乎在工作线程中不起作用

plainworker.js:

var _ = require('underscore'); ///////////// <---- PROBLEM LINE

function fibo (n) {
          return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
        }
onmessage = function (event) {
  postMessage(fibo(event.data));
}
importScripts('./node_modules/underscore/underscore.js');

function fibo (n) {
          return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
        }
onmessage = function (event) {
  postMessage(fibo(event.data));
}

看起来我必须使用“importScripts(..)函数(),因为require似乎在工作线程中不起作用

plainworker.js:

var _ = require('underscore'); ///////////// <---- PROBLEM LINE

function fibo (n) {
          return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
        }
onmessage = function (event) {
  postMessage(fibo(event.data));
}
importScripts('./node_modules/underscore/underscore.js');

function fibo (n) {
          return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
        }
onmessage = function (event) {
  postMessage(fibo(event.data));
}

您得到的错误是什么?没有错误,如果我包含行var_u=require('下划线'),它只会导致服务器挂起;您可以将它加载到服务器中,然后将它作为参数传递给需要它的plainworker方法吗?有什么要求吗?或者只是
require('下划线')
?不,传入它也不起作用。任何require都不起作用。您得到的错误是什么?没有错误,如果我包括var=require(“下划线”)行,它只会导致服务器挂起;您可以将它加载到服务器中,然后将它作为参数传递给需要它的plainworker方法吗?有什么要求吗?或者只是
require('下划线')
?不,传入它也不起作用。任何require都不起作用。这对我来说是有效的-下划线的路径是相对于worker.js文件的…但是它会失败任何最近在最新节点.js的worker threads中使用
import
require
的解决方案?这对我来说是有效的-下划线的路径是相对于worker.js文件的…但是它会失败最近使用
导入
的解决方案需要在最新节点的工作线程中使用
。js?@datdinhqooc任何解决方案?@m4heshd我还没有找到1个,似乎工作线程可以与vanilla js一起使用only@datdinhquoc对我来说,要求包工作,但不是文件,因为我使用的是eval。我才意识到。因此,我将文件的绝对路径作为
workerData
发送,并在worker中要求它。工作起来很有魅力。