JavaScript类是否可接受节点模块?

时间:2017-05-19 02:28:13

标签: javascript node.js

当我引导你完成引出我问题的过程时,请耐心等待。

我正在使用节点中的CLI应用程序,我正在使用对象来使用此模式封装我的业务逻辑:

// my-project/lib/widget/myobject.js

var MyObject = function(x) {
  this.x = x;
};

MyObject.prototype.getX = function() {
  return this.x;
};

module.exports = MyObject;

我也正在测试这些对象:

// my-project/test/lib/widget/myobject.spec.js

var MyObject = require('../../../lib/widget/myobject.js');

describe('MyObject', function() {
  ...
});

有一次,我对我选择的命名和目录结构不满意。在重写相对路径时,我发现自己在几个spec文件中繁琐地计算这些父目录引用(..)。我认为必须有一种更简单的方法来引用包含这些对象定义的根目录。

我发现here之一的建议建议“将特定于应用程序的模块放入node_modules”。

现在,据我了解模块,它们是我从npm下载并在我的项目中使用的软件包。当我调用require时,它们包含一个导出给我的API的有用内容库。这不是我如何查看专为内部使用我的应用程序而构建的简单单一用途类。

如果你这么坚持我,谢谢你!这是我的问题:

如何使我的应用程序的内部更“模块化”,以便在保持面向对象的同时正确遵循Node模块系统的意图?

1 个答案:

答案 0 :(得分:0)

我不确定这对于制作或您计划分发的模块有多适合,但在主文件中您可以添加:

process.env.NODE_PATH = __dirname;
require('module').Module._initPaths();

这将使您始终需要相对于包含主文件的文件夹的模块。即如果您有一个文件:

library/some_file.js

然后在tests/some_other_file.js你可以这样做:

require('library/some_file');

或者您也可以在主文件中添加它:

global.__base = __dirname + '/';

然后在你的其他模块中要求使用:

var MyObject = require(__base + 'my-project/lib/widget/myobject');