javascript - require-dir 会将我的依赖项范围限制到每个导入的文件吗?

标签 javascript node.js commonjs

我正在构建一个 gulpfile 并将任务分成不同的文件。在运行时,我使用 require-dir 一次require所有任务:https://github.com/aseemk/requireDir .

该结构与此处找到的 gulpfile 相同:https://github.com/greypants/gulp-starter :

// ./gulpfile.js
var requireDir = require('require-dir');
requireDir('./gulp/tasks', { recurse: true });

它导入的任务如下所示:

// ./gulp/tasks/browserSync.js
var browserSync = require('browser-sync');
var gulp        = require('gulp');
var config      = require('../config').browserSync;

gulp.task('browserSync', ['build'], function() {
  browserSync(config);
});

所以没有module.exportsexports.something。因此,我想知道 requireDir 是否仍会自动将依赖项范围限制到每个任务。它是否限制了我的依赖项,或者当我这样做时我是否将所有内容都放在全局命名空间中?

最佳答案

您不需要在模块中使用module.exports。如果在您的第​​二个文件 (gulp/tasks/browserSync) 中您要执行以下操作:

var localValue = "bar";

globalValue = "foo";

// and we never touch module.exports

然后 Node 将创建 1 个未导出的本地值和 1 个全局命名空间中的值,但这并不奇怪。

如果您要在 gulpfile.js 中执行此操作:

var baz = requireDir('./gulp/tasks', { recurse: true });

那么baz将是:

{
    ...
    "browserSync": {},  // the default value of 
    ...                 // `module.exports` is an object ( {} )
}

当您在 require() 文件之一中执行此操作时:

var gulp = require("gulp");

然后 require 将返回 cached response ,因为它之前已经在主文件中加载了 /node_modules/gulp/

所以是的,由于您没有创建全局值(所有内容都以 var 为前缀),因此所有内容都包含在任务文件本身中。

关于javascript - require-dir 会将我的依赖项范围限制到每个导入的文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26276770/

相关文章:

javascript - 为 anchor 添加平滑滚动效果

javascript - 将属性 'Scrolling=yes' 应用于所有 iFrame

ruby-on-rails - EventMachine 与 Node.js

javascript - 我可以在 NodeJS 的 require 函数中使用别名吗?

javascript - 模块化 JavaScript——除了 CommonJS 和 AMD 之外,还有什么方法可以考虑吗?

javascript - 为什么数组未定义?

匹配多个重复 block 的 Javascript 正则表达式

javascript - 如果输入是 JavaScript 中的数组数组,如何传播参数

node.js - 如何安全地从 Electron 打开这个外部应用程序?

node.js - 应用启动后成为root