在许多地方,专业人员似乎都在使用一个包含gulp或grunt的node.js脚本来构建他们的项目。我不明白的是,为什么脚本方法是可取的?从命令行版本切换到脚本版本时,可以在其中添加其他软件包:即gulp-uglify,vinyl-source-stream和vinyl-buffer。使用最少量依赖关系的方法不是更安全的长期方法吗?就拿下面我目前使用命令行方式:Browserify uglify通过节点脚本或命令行?
browserify entry.js | uglifyjs > bundle.js
这依赖于browserify和uglifyjs,和我没有一饮而尽的额外的依赖,大口喝,uglifyjs,等...我不必担心与npm中的直线uglifyjs相关的gulp-uglifyjs版本。现在看到以下版本:
var browserify = require('browserify');
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
gulp.task('browserify', function() {
return browserify('./source/scripts/app.js')
.bundle()
.pipe(source('bundle.js')) // gives streaming vinyl file object
.pipe(buffer()) // <----- convert from streaming to buffered vinyl file object
.pipe(uglify()) // now gulp-uglify works
.pipe(gulp.dest('./build/scripts'));
});
如此看来复杂得多,但什么原因会这个不断是建立一个javascript项目更高效,更安全的方法是什么?谢谢。
我会说因为节点的默认异步行为,加快构建过程(尽管shell命令也可以并行化)。如果你使用npm,我推荐这篇文章(这证实了你的发现):http://blog.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/ – bryanph
我不会说话对于吞噬,但作为长期的咕噜声用户,我发现文件匹配的力量是主要吸引力,并且能够链接命令。如果你只是做简单的事情,那么是的,你可以使用命令行,但对于更复杂的构建系统,部分重建,打包,实时代码重载,手表等等等等,没有什么能够运行'grunt'让其他一切都神奇地发生。为什么像make等构建系统存在是有原因的,并且这仍然适用于髋关节语言。 –