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

时间:2017-06-06 14:05:01

标签: javascript node.js module

我有这样的事情:

  • MyModule的
    • index.js
    • myFunction1.js
    • myFunction2.js

index.js文件中,我导出所有模块功能(myFunction1myFunction2)。但是,在myFunction2我使用myFunction1

如果我导入索引(所有模块)并在MyModule.myFunction1内调用myFunction2,我会收到错误(函数不存在)。

如果我导入myFunction1.js并将其称为myFunction1(),则在我进行测试时,我无法创建它。

有什么方法可以做这样的事吗?

6 个答案:

答案 0 :(得分:1)

//////////////////////
// File: ./index.js //
//////////////////////
const myFunction1 = require('./myFunction1.js');
const myFunction2 = require('./myFunction2.js');

module.exports = {
    myFunction1,
    myFunction2
};

////////////////////////////
// File: ./myFunction1.js //
////////////////////////////
module.exports = function1(x){
    return x;
};

////////////////////////////
// File: ./myFunction2.js //
////////////////////////////
const myFunction1 = require('./myFunction1.js'); // or dropping the `.js` require('./myFunction1')
module.exports = function2(x){
    return myFunction1(x);
};

答案 1 :(得分:1)

迭戈的答案很好,除了OP似乎想在myFunction2.js中使用index.js。使用与Diego的相同代码作为index.js

表示index.js(与Diego'相同)

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

module.exports = {
    myFunction1,
    myFunction2
};

for myFunction1.js(small fix)

module.exports = function function1(x){
    return x;
};

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

const MyModule = require('./index.js'); 
module.exports = function function2(x){
    return MyModule.myFunction1(x);
};

和test.js:

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

console.log(myFunction2(20))

答案 2 :(得分:0)

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'));

答案 3 :(得分:0)

这应该可以解决问题。如果它们在同一个文件中会更好。

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

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

如果您需要它们在单独的文件中,您可以在function2文件中要求function1。问题是,每个文件都是自己的模块。来自Node.js文档:

  

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

答案 4 :(得分:0)

const myFunction1 = require('./myFunction1.js');
const myFunction2 = require('./myFunction2.js');
module.exports = {
    myFunction1:myFunction1,
    myFunction2:function(x){
      return myFunction2(x,myFunction1);
    }
}
////////////////////////////
// File: ./myFunction1.js //
////////////////////////////
module.exports = function1(x){
    return x;
};

////////////////////////////
// File: ./myFunction2.js //
////////////////////////////

module.exports = function2(x,myFunction1){
    return myFunction1(x);
};

答案 5 :(得分:0)

您的问题不明确,因为您没有发布您的代码。因为,这是解决问题的有效方法:

<强> 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