可以将多个 JavaScript 文件合并为一个,然后将生成的代码封装到一个自调用函数中,因此这些 JS 文件中的所有代码都变成:
;(function () { /* code form the JS files */ })();
这样就完全不会污染全局命名空间,现在可以在单独的 JS 文件中定义内部模块,这些模块可以跨 JS 文件访问。
除了使内部模块的调试不那么方便(因为无法浏览内部对象、从控制台手动调用它们的函数等)之外,这种方法是否有任何潜在的缺点?
或者,是否有更好的方法允许在可以跨 JS 文件访问的单独 JS 文件中定义内部模块?
以防万一,gulp 代码将 JavaScript 文件连接成一个,然后将生成的代码封装到一个自调用函数中:
var gulp = require("gulp");
var sourcemaps = require("gulp-sourcemaps");
var uglify = require('gulp-uglify');
var concat = require("gulp-concat");
var insert = require("gulp-insert");
gulp.task("default", function () {
return gulp.src("js/app/*.js")
.pipe(sourcemaps.init())
.pipe(concat("app.js"))
.pipe(insert.transform(function(contents, file) {
return ';(function () {' + contents + '})();';
}))
.pipe(uglify())
.pipe(sourcemaps.write("."))
.pipe(gulp.dest("build/assets/js"));
});