将模块从模块暴露给模块

时间:2016-05-03 18:21:33

标签: javascript node.js module npm fs

我的节点应用程序需要获取文件夹的路径并从那里读取所有文件。

e.g

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

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

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

应用程序B结构如下:

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

在appB server.js内部,我正在执行以下操作(加载moduleA)

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

moduleA.start();

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

我的问题是

  1. 我将moduleA作为npm模块发布,我的问题应该如何公开 moduleA.loadFolderFiles 的API(推荐方式)?
  2. 2.我应该如何提供它的路径(相对/绝对)并读取文件 来自模块appB?

    这是" moduleA"在npm(用于测试) https://www.npmjs.com/package/samplenodeapp

    这是moduleB加载moduleA的代码

     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
    };
    

    正如你所看到的,我从控制器/加载中公开了方法,如下所示(为loadFolderFiles提供api,是否可以?

1 个答案:

答案 0 :(得分:1)

如果需要设置加载文件夹,我建议将其移至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
   }
};