节点定义了我需要在模块上使用的唯一变量



当前我只是通过这样的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中使用该方法的最佳方法是什么?

在这种情况下, globalglobal.fileNamePrefix = shortid.generate();这样的对象会这样做还是您会处理不同的?我刚刚读到global不好...

您可以使用 @的方法或 @lielto的方法或 @的方法。

  1. singleton:

    //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((;多次,生成函数仅被调用一次。

  1. 节点缓存方法:

认为您的shortid.js如下:

// A: block of code to do some manipulations
// B : module.exports = manipulation result.

因此,基本上是在节点JS"模块"核心模块中,该模块负责为我们提供模块。EXPORT功能在此处执行任何Export(在Abode示例a(中仅是第一次,即使您有必要,也可以缓存它在其他多个文件中。但是,它仅在导出内部的每个要求中执行函数或代码块。因此,您可以使用此方法,其中A块将具有登录名来生成FileNamePrefix,然后B将其返回。

只需创建像这样的模块:

// unicname.js
let shortid = require('shortid');
let fileName = shortid.generate();
module.exports = {fname: fileName};
//module1.js
const {fname} = require('./unicname.js');
....

由于node.js缓存模块,该值将仅计算一次,因此您可以在所有模块中获得相同的值。

最新更新