ES6模块/节点模块重复要求还是将其作为parameter passing?

我有以下疑问ES6模块,并通过扩展也与节点commonjs模块样式。

主要的问题是如何更好地分离?,在每个需要依赖的文件中重复导入/ require语句,或者需要/ imports的主文件,然后将这些值作为parameter passing。 很难用简单的语言来解释,只是一个简单的例子:

脚本,task.js

var gulp = require('gulp'), options = require('../options'), babelify = require('babelify'), browserify = require('browserify'), source = require('vinyl-source-stream'), del = require('del'), errorParser = require('../error-parser'); module.exports = function(gp) { /*gulp task*/ } 

gulpfile.js

 var gulp = require('gulp'), options = require('./gulp/options'), errorParser = require('./gulp/error-parser'), del = require('del'), gp = require('gulp-load-plugins')(); gt.scriptsTask(gp); 

Asyou在这两个文件中都看到了gulp,del和其他文件,但是gp也作为parameter passing,因为我不想在所有任务中重复这个要求。 同样可以应用于吞咽等。

主要问题是哪种方式更好的性能/可维护性等。

我更喜欢有一个文件处理所有的需求,然后通过parameter passing给我看来,因为一切都在一个地方,所以我觉得更加可恶,但有时候我认为可能是一个地狱来维护,我很困惑。 我读过,要求只做一次,然后caching起来,所以在多次使用时没有额外的性能影响,但是在我眼中看起来很丑。

与ES6模块相同但问题的另一部分:

 a.js import render from './b.js'; export let shared = { canvas: undefined, context: undefined } //operations here render(); b.js import {shared} from "./a.js"; 

要么

 a.js import render from './b.js'; let shared = { canvas: undefined, context: undefined } //operations here render(shared); b.js //no import 

希望我明确表示,自从很多时候我有这个疑问,这就是为什么我决定发表问题,将是一个启发,知道真相。