繁体   English   中英

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

[英]Node define unique variable that I need to use across the modules

目前,我只是像这样传递我的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.fileNamePrefix = shortid.generate();这样的global对象global.fileNamePrefix = shortid.generate();global.fileNamePrefix = shortid.generate(); 在那种情况下会做还是会采取不同的方式? 我刚刚读到global不好...

像这样创建模块:

// unicname.js
let shortid = require('shortid');
let fileName = shortid.generate();

module.exports = {fname: fileName};

//module1.js
const {fname} = require('./unicname.js');
....

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

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

  1. 单身人士:

     //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函数仅被调用一次。

  1. 节点缓存方法:

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

// A: block of code to do some manipulations

// B : module.exports = manipulation result.

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM