看着我的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示例?
答案 0 :(得分:3)
gulpfile在节点中运行,而不是在浏览器中运行。在浏览器中,这些变量将被定义为全局变量。在节点中,这是不同的。从docs
开始顶级范围不是全球范围; Node模块中的var something将是该模块的本地
所以在gulpfile中定义没有IIFE的变量是可以的
答案 1 :(得分:2)
请记住,gulp在node节点中运行,globals的行为与浏览器不同。
在浏览器中,顶级范围是全局范围。这意味着在浏览器中,如果您在全局范围内,var会定义一个全局变量。在Node中,这是不同的。顶级范围不是全球范围; Node模块内的var something将是该模块的本地内容。
所以这些变量不是全局变量。节点与浏览器的工作方式略有不同,因此您应该阅读docs以了解差异