Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将函数注入到需要的文件中?_Javascript_Node.js - Fatal编程技术网

Javascript 如何将函数注入到需要的文件中?

Javascript 如何将函数注入到需要的文件中?,javascript,node.js,Javascript,Node.js,我有main.js: function someFunc($smt){ // Do something } require('./script.js'); someFunc($someParam); 当我尝试运行script.js时: function someFunc($smt){ // Do something } require('./script.js'); someFunc($someParam); 我有一个错误: ReferenceError: someFunc

我有
main.js

function someFunc($smt){
  // Do something
}

require('./script.js');
someFunc($someParam);
当我尝试运行
script.js
时:

function someFunc($smt){
  // Do something
}

require('./script.js');
someFunc($someParam);
我有一个错误:

ReferenceError: someFunc is not defined

如何将父文件中的函数导入到所需文件中?

Make
script.js
导出执行该工作的函数,并让该函数接受一个参数

script.js中

module.exports = function (f) {
  f();
}
var script = require('./script.js');

function someFunc(){
  // Do something
}

script(someFunc);
然后在
main.js中

module.exports = function (f) {
  f();
}
var script = require('./script.js');

function someFunc(){
  // Do something
}

script(someFunc);

使
script.js
导出执行该操作的函数,并使该函数接受一个参数

script.js中

module.exports = function (f) {
  f();
}
var script = require('./script.js');

function someFunc(){
  // Do something
}

script(someFunc);
然后在
main.js中

module.exports = function (f) {
  f();
}
var script = require('./script.js');

function someFunc(){
  // Do something
}

script(someFunc);

我认为,这是将自定义参数包含到所需脚本中的更好解决方案:

// main.js

function someFunc($smt) {
  // Do something
}

$require = require;
// prepare $require for inject

$module = module;
// prepare $module for inject

var script = fs.readFileSync('./script.js', 'UTF8');
script = new Function('someFunc', 'require', 'module', script);
script.call({}, someFunc, $require, $module);
TODO:使全局函数为请求的文件准备$require和$module变量。然后像这样打电话:

const script = include(file/path);

我认为,这是将自定义参数包含到所需脚本中的更好解决方案:

// main.js

function someFunc($smt) {
  // Do something
}

$require = require;
// prepare $require for inject

$module = module;
// prepare $module for inject

var script = fs.readFileSync('./script.js', 'UTF8');
script = new Function('someFunc', 'require', 'module', script);
script.call({}, someFunc, $require, $module);
TODO:使全局函数为请求的文件准备$require和$module变量。然后像这样打电话:

const script = include(file/path);


你不能。这与
require
的工作原理相反。如果所需文件需要来自所需文件的函数(尽管将变量/函数传递给所需文件中的函数是常见的),则可能是设计缺陷。您将
require
误认为包含function@Quentin有其他的解决办法吗?只是,我不能将此函数设置为全局函数,因为它可以动态地处理每个您不能处理的所需文件。这与
require
的工作原理相反。如果所需文件需要来自所需文件的函数(尽管将变量/函数传递给所需文件中的函数是常见的),则可能是设计缺陷。您将
require
误认为包含function@Quentin有其他的解决办法吗?只是,我不能将此函数设置为全局函数,因为它对每个需要的文件都是动态的。在我看来,这太复杂了,而且不是惯用的节点用法。在5年的节点开发中,我以前从未见过类似的情况。只要正常地使用
require
。@JedRichards不幸的是,我不能,因为我需要为每个文件使用动态的decorator尝试并在问题中更好地解释您的问题。我相信有一种简单的方法可以实现您需要做的事情。@JedRichards主脚本从运行服务器的child dir加载一些文件。每个服务器都必须与父目录隔离,但可以访问一些核心函数(由主脚本决定),并且必须能够访问服务器内每个加载的文件(如全局函数)。这在我看来过于复杂,不是惯用的节点用法。在5年的节点开发中,我以前从未见过类似的情况。只要正常地使用
require
。@JedRichards不幸的是,我不能,因为我需要为每个文件使用动态的decorator尝试并在问题中更好地解释您的问题。我相信有一种简单的方法可以实现您需要做的事情。@JedRichards主脚本从运行服务器的child dir加载一些文件。每个服务器必须与父目录隔离,但可以访问某些核心功能(由主脚本决定),并且必须能够访问服务器内每个加载的文件(如全局功能)