将我的 gulpfile 包装在立即调用的函数表达式中

Wrapping my gulpfile in an immediately-invoked function expression

查看我的 gulpfile 我刚刚意识到我必须在全局范围内声明我的所有变量。

我的 gulpfile 看起来非常典型(与 this one 不同),在文件顶部声明了一堆 var

var gulp = require('gulp');
var browserify = require('gulp-browserify');
var concat = require('gulp-concat');
var less = require('gulp-less');
var refresh = require('gulp-livereload');
var minifyCSS = require('gulp-minify-css');

但这向我表明,文件顶部的所有这些 var 都只是被拍打到全局对象上。

我是不是傻了? 我应该将我的 gulpfile 包装在 IIFE 中吗?

如果是这样,为什么我在网上的任何地方都看不到 IIFE 中的 gulpfile 示例?

gulpfile 在节点中运行,而不是在浏览器中运行。在浏览器中,这些变量将被定义为全局变量。在节点中这是不同的。来自 docs

The top-level scope is not the global scope; var something inside a Node module will be local to that module

所以在gulpfile中定义没有IIFE的变量是可以的

请记住,gulp 在节点中运行,在节点中全局变量的行为与浏览器不同。

In browsers, the top-level scope is the global scope. That means that in browsers if you're in the global scope var something will define a global variable. In Node this is different. The top-level scope is not the global scope; var something inside a Node module will be local to that module.

所以这些变量不是全局变量。 Node 的工作方式与浏览器略有不同,因此您应该阅读 docs 以了解差异