【问题标题】:Expose modules from node NPM application从节点 NPM 应用程序公开模块
【发布时间】:2016-09-23 13:35:58
【问题描述】:

我有节点应用程序(它用作 npm 模块并被其他节点应用程序用作对 package.json 的依赖项),它需要提供对某些内部模块的访问权限(对使用我的包作为依赖项的应用程序) 所有这些模块都对需要使用的功能使用导出

我的“主”模块是 index.js

在其中我执行以下操作:

var appState = require("./utils/appState");
var appLclStorage = require("./utils/AppLocalStorage");
var processHandler = require("./controller/processHandler");
....

var appApi = module.exports = {};

appApi.appState = appState;
appApi.appLclStorage = appLclStorage;
appApi.processHandler = processHandler;
....

我有额外的模块要暴露在外面......

这工作OK,但我的问题是在节点中是否有更好/更清洁的方法来做到这一点?

【问题讨论】:

  • 这是我经常看到的一种方法。
  • 由于package.json 中的main 文件的要求,我不确定是否有更好的方法,即使像aws-sdk 这样的大包也使用这种模式编写。不过问题很好。
  • @peteb - 谢谢 :)

标签: javascript node.js module npm


【解决方案1】:

我发现按照您描述的方式进行操作效果很好。

您可以通过在目录中添加一个 index.js 文件并让它从同一目录中导出其他文件来稍微构建它。然后require目录获取全部。

// add.js
module.exports = function (num1, num2) { 
  return num1 + num2;
};

// subtract.js
module.exports = function (num1, num2) { 
  return num1 - num2;
};

// multiply.js
module.exports = function (num1, num2) { 
  return num1 * num2;
};

// index.js
var Calc = {};
require('fs').readdirSync(__dirname).forEach(function (file) {
  if (file !== 'index.js') {
    var fileName = file.replace('.js', '');
    Calc[fileName] = require('./' + fileName);
  }
});
module.exports = Calc;

// main.js
var Calc = require('./calc');

var zero = Calc.subtract(1, 1);
var one = Calc.multiply(1, 1);
var two = Calc.add(1, 1);

文件结构如下:

├── calc
│   ├── add.js
│   ├── index.js
│   ├── multiply.js
│   └── subtract.js
└── main.js

【讨论】:

    猜你喜欢
    • 2019-01-26
    • 2023-04-01
    • 2017-05-08
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    相关资源
    最近更新 更多