Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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_Module - Fatal编程技术网

Javascript 使用同一模块的另一个功能的模块

Javascript 使用同一模块的另一个功能的模块,javascript,node.js,module,Javascript,Node.js,Module,我有这样的想法: MyModule index.js myFunction1.js myFunction2.js 在index.js文件中,我正在导出所有模块函数(myFunction1和myFunction2)。但是,在myFunction2中,我使用myFunction1 如果我导入索引(所有模块)并在myFunction2中像MyModule.myFunction1那样调用它,我会得到一个错误(函数不存在) 如果我导入myFunction1.js并像调用myFunction1()一

我有这样的想法:

  • MyModule
    • index.js
    • myFunction1.js
    • myFunction2.js
index.js
文件中,我正在导出所有模块函数(
myFunction1
myFunction2
)。但是,在
myFunction2
中,我使用
myFunction1

如果我导入索引(所有模块)并在
myFunction2
中像
MyModule.myFunction1
那样调用它,我会得到一个错误(函数不存在)

如果我导入
myFunction1.js
并像调用
myFunction1()
一样调用它,那么在测试它时,我就无法生成存根

有什么办法可以这样做吗?

index.js

let fnk1 = (a) => {
  return a + ' 1 '
}
let fnk2 = (a) => {
  return fnk1(a)
}
module.exports = {
 fnk1,
 fnk2
}
test.js

let Mymodule = require('./index')
console.log(Mymodule.fnk2('argValue'));

这应该能奏效。如果它们在同一个文件中就更好了

module.exports.myFunction1 = function() {
...
}

module.exports.myFunction2 = function() {
   module.exports.myFunction1()
}
如果需要将它们放在单独的文件中,可以要求function2文件中包含function1。问题是,每个文件都是它自己的模块。从Node.js文档:

Node.js有一个简单的模块加载系统。在里面 Node.js、文件和模块一一对应(每个文件 被视为一个单独的模块)


Diego的答案很好,只是OP似乎想在myFunction2.js中使用index.js。对index.js使用与Diego相同的代码

对于index.js(与Diego的相同)

对于myFunction1.js(小补丁)

对于myFunction2.js(更改为包含index.js):

还有一个test.js:

const myFunction2 = require('./myFunction2.js');

console.log(myFunction2(20))
const myFunction1=require('./myFunction1.js');
const myFunction2=require('./myFunction2.js');
module.exports={
myFunction1:myFunction1,
myFunction2:函数(x){
返回myFunction2(x,myFunction1);
}
}
////////////////////////////
//文件:./myFunction1.js//
////////////////////////////
module.exports=function1(x){
返回x;
};
////////////////////////////
//文件:./myFunction2.js//
////////////////////////////
module.exports=function2(x,myFunction1){
返回myFunction1(x);

};您的问题不清楚,因为您没有发布代码。因为,这里有一个解决您问题的有效方法:

MyModule.js:

function myFunction1() {
  console.log("- I am myFunction1")
}

function myFunction2() {
  console.log("- I am myFunction2")
  myFunction1()
}

module.exports = {
  myFunction1,
  myFunction2
}
index.js

const MyModule = require('./MyModule')

console.log("Call myFunction1")
MyModule.myFunction1()
console.log("Call myFunction1")
MyModule.myFunction2()
如果执行
node index.js
,将获得以下输出:

Call myFunction1
- I am myFunction1
Call myFunction2
- I am myFunction2
- I am myFunction1

你能发布你的代码吗?发布你的代码!可以使用多个模式来实现您想要的功能。这正是我试图避免的:同一文件中的函数。但是谢谢你的尝试。@SantiagoMendozaRamirez你能给出一个你想实现的更详细的模块伪代码示例吗?在学习es6的过程中也遇到过类似的问题。通过围绕一个概念建立实践,这些问题得以减少。这正是我试图避免的。我希望每个函数都在自己的文件中。感谢node.js doc quote。我想完成的是,我可以使用对象调用函数,这样我就可以通过制作存根来测试它,而不会有任何问题。类似于mymodule.function2。我正在研究,但似乎无法在nodejs中完成。您想测试
函数1
,但不测试
函数2
,而是为其创建一个模拟?
const myFunction2 = require('./myFunction2.js');

console.log(myFunction2(20))
function myFunction1() {
  console.log("- I am myFunction1")
}

function myFunction2() {
  console.log("- I am myFunction2")
  myFunction1()
}

module.exports = {
  myFunction1,
  myFunction2
}
const MyModule = require('./MyModule')

console.log("Call myFunction1")
MyModule.myFunction1()
console.log("Call myFunction1")
MyModule.myFunction2()
Call myFunction1
- I am myFunction1
Call myFunction2
- I am myFunction2
- I am myFunction1