从一个模块暴露到另一个模块

Expose modules from module to module

本文关键字:模块 暴露 另一个 一个      更新时间:2023-09-26

我有一个节点应用程序,它需要获取文件夹的路径并从中读取所有文件。

例如

moduleA
 -server.js 
 -controller 
  --load.js

在load.js中,我有一个方法(loadFolderFiles),它应该获取文件的路径路径并从中加载所有文件。

现在从模块B,我需要模块A并添加文件夹路径来读取文件

应用程序B的结构如下:

 appB
   -src
    --files
      ---fileA.js
      ---fileB.js
   -server.js 

在appBserver.js中,我正在执行以下操作(加载模块A)

var moduleA = require('moduleA')
moduleA.loadFolderFiles('/appB/src/files')
moduleA.start();

现在moduleA将开始加载所提供路径的文件(我想使用glob)。

我的问题是

  1. 我将moduleA发布为npm模块,我的问题是我应该如何公开模块A.loadFolderFiles的API(推荐方式)

2.我应该如何提供它的路径(相对/绝对)和读取文件来自模块appB?

这是npm中的"模块A"(用于测试)https://www.npmjs.com/package/samplenodeapp

这是模块B加载模块A 的代码

 var sample = require('samplenodeapp');
    sample.start();

我公开模块a的代码如下

var express = require('express');
var loadModule = require('./controller/load')
var app = express();
function start (){
    app.listen(3001, function () {
        console.log("App is listenting on port 3000");
    })
}
module.exports = {
    start:start, 
    loadModule:loadModule
};

正如你所看到的,我从controller/load中公开了如下方法(为loadFolderFiles提供api,可以吗?

如果需要设置加载文件夹,我建议将其移动到start参数或模块设置。

var moduleA = require('moduleA')({ loadFolder: '/path/to/folder' });
// or
var moduleA = require('moduleA');
moduleA.start({ loadFolder: '/path/to/folder' });

如果您选择将其移动到模块设置,则应该从该模块导出一个函数。

var createLoader = require('./controller/load');
module.exports = function (params) {
   // params === { loadFolder: '/path/to/folder' }
   var loadModule = createLoader(params.loadFolder);
   return {
       start: start,
       loadModule: loadModule
   }
};