目前,我只是这样传递我的fileNamePrefix

let shortid = require('shortid');
let fileNamePrefix = shortid.generate();

module1.run(fileNamePrefix); //generating a file based on `fileNamePrefix` `xxxxx.f1.json`
module2.run(fileNamePrefix); //generating a file based on `fileNamePrefix` `xxxxx.f2.json`
module3.run(fileNamePrefix); //generating a file based on `fileNamePrefix` `xxxxx.f3.js


我认为不太正确,以后可能需要将更多内容传递给模块,因此我想避免将其作为函数params传递。

在nodejs中实现此目标的最佳方法是什么?

在这种情况下,像global这样的global.fileNamePrefix = shortid.generate();对象会起作用吗?还是您会采取不同的方法?我刚刚读到global不好...

最佳答案

您可以使用单例方法或@СергейТертичный建议的方法


单身人士:

//shortid.js

var fileSingleTon = module.exports = {

    fileNamePrefix: null,

    getFileNamePrefix: function() {
        return fileSingleTon.fileNamePrefix || fileSingleTon.generate()
    },
    generate: function() {
        console.log('generating..');
        return fileSingleTon.fileNamePrefix = 'your_file_prefix';
    }
}

//module1.js

var fileNamePrefix = require('./shortid').getFileNamePrefix();

//do stuff for module1

//module2/js

var fileNamePrefix = require('./shortid').getFileNamePrefix();

//do stuff for module1


等等..


即使现在您正在调用require('./ shortid')。getFileNamePrefix();多次,generate函数仅被调用一次。


节点缓存方法:


考虑您具有shortid.js,如下所示:

// A: block of code to do some manipulations

// B : module.exports = manipulation result.


因此,基本上在节点js的“模块”核心模块中,它负责为我们提供module.export功能仅首次执行export(在上面的示例中为A部分)以上的内容,即使您多次要求也将其缓存其他文件。但是,它仅在导出内部的每个需求中执行功能或代码块。因此,您可以使用这种方法,其中您的A块将登录以生成fileNamePrefix,然后B仅仅返回它。

09-25 19:18