我应该把包依赖传递给模块函数,还是只在模块文件中需要它们?
Should I pass package dependencies to a module function or just require them in the module file?
我理解可以通过将模块导出为带有您希望传递的每个变量的参数的函数来将变量传递给模块。例如
module.exports = module.exports = function (injectedVariable) {
app.get('/whatever', function (req, res, next) {
// Do something with injectedVariable
});
};
我理解这对于在不同模块周围传递像"app"这样的变量是有用的。但是,处理外部包依赖关系的首选模式是什么?我曾见过这样的代码。
App.js
var jquery = require('jquery');
var _ = require('underscore');
var backbone = require('backbone');
var express = require('express');
// Pretty much every other external library
var app = express();
// Code here might config some of the 3rd party modules
require('routes/main.js')(app, _, jquery, backbone, someOtherModule, someOtherModule2);
require('routes/main.js')(app, _, jquery, backbone, someOtherModule, someOtherModule2);
// Etc
// Init server etc
然后每个路由模块将导出一个函数,其中包含所有可用的参数,以支持需要传递给它们的包。
这样做有什么原因吗?在每个文件的顶部只要求('whatever')不是更干净吗?据推测,在不同的文件中对同一个模块使用许多require()并不是问题,因为node将从运行时遇到的require()的第一个实例中提取其缓存版本。哪种管理包依赖关系的方法是首选的?
这样做有什么原因吗?
对于像underscore、jquery、backbone这样的常规模块使用这种模式,明显违反了构建node的基本CommonJS模式。不要这样做。只需要你的模块直接使用CommonJS语法。对于测试和依赖注入,有一些commonjs兼容的方法可以实现,比如rewire或injector。
但是,它与express app
实例不同,因为它是具有特定配置的特定对象,因此可以传入它。但是,express 4消除了使用此模式的最常见需求,因为您可以在外部主应用程序中挂载子应用程序。
相关文章:
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 在ES6中,模块将导致多个网络调用,因为两个模块不能在单个文件中定义
- 如何定义一个模块并使用它来分离js文件
- 如何引用HTML中节点模块中的js文件
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 需要从一个文件中获取多个模块
- 是否可以从javascript文件中将量角器作为模块运行
- 文件结构:使用索引.js文件级联访问子模块或子文件
- ESDoc将我所有的模块方法放在一个标题下,而不是放在每个文件下,我该如何改变这种行为
- Nodejs模块文件和concat
- 如何在RT上添加插件和使用一些外部模块/文件
- jQuery($)在模块文件中不可用
- 将信息从 Drupal 7 中的模块文件传递给 JS 文件
- requireJS和AMD模块/文件夹组织
- 如何将drupal 6中的库添加到模块文件中(运行由flexslider创建的幻灯片)
- 可以webpack为浏览器和节点输出单独的脚本和模块文件
- 我应该把包依赖传递给模块函数,还是只在模块文件中需要它们?
- 将AngularJS应用中的模块文件包含到Karma的RequireJS配置文件中
- 如何从Drupal模块文件中的.js文件调用javascript函数
- 您可以在没有回调的情况下从模块文件中调用主node.js服务器文件中的函数吗