如何在全局和本地函数中使用require

sho*_*a T 0 javascript require node.js

我使用节点JS aplication并且我用模块创建了新的js文件.在这个模块中我只导出一个函数,在这个模块中我可以说我还有两个函数仅供内部使用,不应该暴露在外面,每个函数都使用不同的需要模块如下:

module.exports = function (app, express) {

    var bodyParser = require('body-parser'),
        url = require('url'),
        http = require('http');

.....
};


function prRequest(req, res) {

    httpProxy = require('http-proxy');
....

}

function postRequest(req, res) {

 url = require('url');
....

}
Run Code Online (Sandbox Code Playgroud)

我的问题来自最佳实践,我应该在哪里提出要求(对于网址http等)

1.在所有需要它的功能中?在我的情况下内部和外部

2.globally在每个函数可以使用的文件中?

3.如果两个不行,我应该在哪里放置我应该在两个函数中使用的require URL?更好地放入函数或全局或者无关紧要

kpi*_*mov 5

每次调用函数时,模块应暴露在函数外部,因为调用需要额外的开销.相比:

const url = require('url');
const start = Date.now();

for (let i = 0; i < 10000000; i++) {
    url.parse('http://stockexchange.com');
}

console.log(Date.now() - start);
Run Code Online (Sandbox Code Playgroud)

至:

const start = Date.now();

for (let i = 0; i < 10000000; i++) {
    require('url').parse('http://stackexchange.com');
}

console.log(Date.now() - start);
Run Code Online (Sandbox Code Playgroud)

在我的机器上,前者需要95.641秒才能完成执行,而后者需要125.094秒.即使您导出使用所需模块的函数,它在导入时仍然可以访问其文件中的其他变量.所以我会在每个文件中本地声明模块,而不是全局.

编辑:这意味着你想要这样做:

var bodyParser = require('body-parser'),
    url = require('url'),
    http = require('http');

module.exports = function (app, express) {
    ....
};

var httpProxy = require('http-proxy');

function prRequest(req, res) {
    ...
}
Run Code Online (Sandbox Code Playgroud)