2017-02-21 5 views
1

Как создать функцию, которая используется только в mymodule.jsNodeJS, Создание функции, а затем экспортировать его

, но также доступен из внешнего mymodule.js

Конечно, я мог бы также сделать:

module.exports = { 
    myfunction: function() { 
    return "HELLO"; 
    }, 

};

Но разве нет способа объявить функцию один раз и экспортировать ее позже?

mymodule.js:

var x = function P(inp) { 

    console.log('P'); 

} 

module.exports = { 
    method: x(), 
} 

other.js:

var mac = require('./mymodule.js'); 

mac.x(); //<-- does not work 
+0

Возможный дубликат [Использование экспорта в nodejs возвращать значение] (http://stackoverflow.com/questions/42352348/using-exports-in-nodejs -to-return-a-value) –

ответ

2

В mymodule.js:

function P(inp) { // you may or may not declare it with "var x ="..both are valid 
    console.log('P'); 
} 

module.exports = { 
    method: P // "method" is the name by which you can access the function P from outside 
}; 

В other.js:

var mac = require('./mymodule.js'); 

mac.method(); // Call it by the name "method" 

Если вы хотите, вы также можете сохранить одно и то же имя. то есть, в mymodule.js:.

module.exports = { 
    P: P // In this case, "P" is the name by which you can access the function P from outside 
}; 

Вы также можете экспортировать его как это:

exports.P = P; // This has the same effect as above example 

Или:

module.exports.P = P; // This has the same effect as above example 

Однако, если вы хотите экспортировать только одну функцию из mymodule.js, то вы можете сделать то, что предлагали @LucaArgenziano:

В mymodule.js:

function P(inp) { 
    console.log('P'); 
} 

module.exports = P; 

В other.js

var mac = require('./mymodule.js'); 

mac(); 
+0

Спасибо, отлично работает – user1327352

+0

@ user1327352 Не забудьте принять этот ответ :) –

+2

Если вы экспортируете только одну функцию за пределы JS-файла, нет необходимости добавлять все эти поля к объекту 'module.exports'. Вы можете просто сделать 'module.exports = P;'. По дизайну метод node.js 'require' ищет' module.exports' внутри целевого файла и возвращает его. В этом случае выполните что-то вроде: 'var mac = require ('./ mac.js'); mac(); 'на мой взгляд, имеет гораздо больше смысла. –

Смежные вопросы