什么被认为是分享"全球"的好方法。节点模块中的变量?

时间:2016-02-15 09:52:21

标签: javascript node.js npm node-modules

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

我正在编写节点模块,并且我想在模块中重用一些全局内容 最基本的 - 我想将模块的根路径设置为全局'所以我可以很容易地调用其他来源而不使用很多相对路径../../等等。它可能导致代码混乱,如果项目结构发生变化,很容易误解或错过。

所以我已经看到很多选项in that post以及其他一些用于处理这类事情的库(例如提供根路径的模块 - app-module-path,{{3} },rootpath等)但它们都是指基础项目/应用程序,而不是其他人使用的模块。

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

那件事有好的做法吗?也许还有我无法找到或听到的东西。

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

// 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'
};

2 个答案:

答案 0 :(得分:1)

要获取当前目录路径,可以在nodejs项目中的任何位置使用全局变量$('.btn, .product-delete').on("click", function(){ $this=$(this); var unitPrice=parseInt($this.parents("tr").find(".unit-price").text()); switch($this.text()){ case " +": currentVal= parseInt($this.parents("tr").find("input[type='text']").val()); newVal=currentVal+1; $this.parents("tr").find("input[type='text']").val(newVal); $this.parents("tr").find(".total-price").text(unitPrice*newVal); break; case " -": currentVal= parseInt($this.parents("tr").find("input[type='text']").val()); if(currentVal==0){ break; } newVal=currentVal-1; $this.parents("tr").find("input[type='text']").val(newVal); $this.parents("tr").find(".total-price").text(unitPrice*newVal); break; case "Delete": $this.parents("tr").remove(); } //sum all total cols var total=0; $(".total-price").each(function(){ total+= parseInt($(this).text()); }); $(".grand-total").text("Total "+total); }); 。示例:__dirname将此内容写入项目中的任何文件,控制台会将当前目录路径打印为字符串。 或者,您可以使用快递会话模块;

console.log(__dirname)

答案 1 :(得分:0)

首先......相对路径根本不会产生混淆。相反,你可以称之为凌乱(如果你想),它被认为是最好的做法。但我也能理解你。你不喜欢非常凌乱的代码。因此,对于这种情况,您应该将该部分/代码作为静态内容提供。因此,您可以轻松地通过提供非常登录的拖尾路径来访问它。但请记住,这种方式是相对路径服务的替代方式。