限制在Node.js中使用模块导出

时间:2018-04-13 12:59:28

标签: node.js

我有两个模块:

InternalDefs.js:

const internalLevel = 0;

module.exports = {
  internalLevel 
};

ExternalDefs.js:

const { internalLevel } = require('./InternalDefs');
const exportedLevel = internalLevel;

module.exports = {
  exportedLevel 
};

InternalDefs将包含只应在ExternalDefs中使用的定义。

如果两个文件都将通过ExternalDefs导出,并且希望使用该功能的每个人都应该只使用ExternalDefs,那么这个功能。

这是内部操作的封装。例如,数据库模块。

ExternalDefs将具有将使用的功能。 InternalDefs仅用于外部函数。

那么,有没有办法只允许ExternalDefs要求在Node.js中导出InternalDef?

2 个答案:

答案 0 :(得分:1)

试图像这样限制它可能是一个坏主意。理想情况下,您应该在一个文件中定义它们,而在内部定义的任何内容都不是您的内部数据。一旦导出,它就可供所有人使用。

但是,如果必须,您可以在internalDefs.js中编写此代码,以限制它仅由externalDefs.js所需。尽早将其添加到internalDefs.js

if (!(module && module.parent && module.parent.filename && module.parent.filename.endsWith && module.parent.filename.endsWith("/ExternalDefs.js")))
  throw new Error("InternalDefs is only allowed to be required by ExternalDefs");

答案 1 :(得分:0)

如果您要说的是,您希望第三个类只能访问ExternalDefs.js,而不能InternalDefs.js参考internalDefs中定义的ExternalDefs.js那么它不会。 任何外部课程require ExternalDefs.js只能访问internalDefs中定义的ExternalDefs.js,并且无法访问InternalDefs.js内的属性 如果这不是你的问题,我建议你详细说明