什么被认为是在节点模块中共享“全局”变量的好方法

What's considered a good way to share "global" variables inside a node module?

本文关键字:全局 变量 方法 共享 认为是 节点 模块 什么      更新时间:2023-09-26

如何在没有明确相对路径(../../../lib..(的情况下轻松引用模块中的其他目录?

我正在编写一个节点模块,我想在我的模块中重用一些全局内容。
最基本 - 我想将模块的根路径设置为"全局",这样我就可以轻松调用其他源,而无需使用大量相对路径../../之类的东西。它可能会导致代码混乱,如果项目结构发生变化,很容易出错或错过它。

所以我在那篇帖子和其他一些库中看到了很多用于处理这些事情的选项(例如提供根路径的模块 - app-module-path、rootpath、rfr 等(,但它们都引用了一个基本项目/应用程序,而不是其他人正在使用的模块。

设置全局是一个坏主意,我知道环境变量也不是一个好主意。

有没有这方面的好做法?也许有些东西我没有发现或听说过。

以下是我试图避免的内容和我正在寻找的内容的示例:

// avoid things like that:
// ./lib/something/forthat/doit.js
var config = require('../../../config/project/type1/config.js');
// ./config/project/type1/config.js
module.exports = {
  msg: 'hi'
};

// find somethings like that:
// when the root path/require can be found in every location of the module
// and is relative to my app and not the app using my module.
// ./lib/something/forthat/doit.js
var config = require(rootPath + 'config/project/type1/config.js');
// OR
var config = rootRequire('config/project/type1/config.js');
// OR anything else
// ./config/project/type1/config.js
module.exports = {
  msg: 'hi'
};

要获取当前目录路径,您可以在nodejs项目中的任何位置__dirname全局变量。示例:console.log(__dirname)将其写入项目和控制台中的任何文件,则将当前目录路径打印为字符串。或者,您可以使用快速会话模块,例如;

var express = require('express');
var session = require('express-session');
var app = express();
app.use(session({myVar: 'abc'}));
app.get('/',function(req,res){
var sess = req.session;
console.log(sess);
});

首先.....相对路径根本不会造成混乱。相反,您可以将其称为混乱(如果需要(,这被认为是最佳实践。但我也能理解你。你不喜欢非常混乱的代码。因此,对于这种情况,您应该将代码的那部分/部分作为静态内容提供。因此,您可以通过提供非常登录的跟踪路径轻松访问它。但请记住,这种方式是相对路径服务的替代方法。