从Node NPM应用程序中公开模块

4

我有一个 Node 应用程序(作为 npm 模块使用,并在其他 Node 应用程序的 package.json 中被用作依赖项),需要提供对一些内部模块的访问(由使用我的包作为依赖项的应用程序使用)。

所有这些模块都使用 export 导出需要被消费的函数。

我的 "main" 模块是 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;
....

我添加了一个模块来对外部进行公开...

这已经可以正常工作了,但我的问题是,在node中是否有更好/更清晰的方法来实现?


3
我常见到这种方法。 - Robert Moskal
1
我不确定是否有更好的方法,因为在你的 package.json 中需要 main 文件的要求,即使像 aws-sdk 这样的大型包也是使用这种模式编写的。不过这是个很好的问题。 - peteb
@peteb - 谢谢 :) - user6171746
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接