2015-05-23 28 views
1

在许多地方,专业人员似乎都在使用一个包含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项目更高效,更安全的方法是什么?谢谢。

+1

我会说因为节点的默认异步行为,加快构建过程(尽管shell命令也可以并行化)。如果你使用npm,我推荐这篇文章(这证实了你的发现):http://blog.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/ – bryanph

+1

我不会说话对于吞噬,但作为长期的咕噜声用户,我发现文件匹配的力量是主要吸引力,并且能够链接命令。如果你只是做简单的事情,那么是的,你可以使用命令行,但对于更复杂的构建系统,部分重建,打包,实时代码重载,手表等等等等,没有什么能够运行'grunt'让其他一切都神奇地发生。为什么像make等构建系统存在是有原因的,并且这仍然适用于髋关节语言。 –

回答

2

不是。命令行仍然是最安全的方式。并且npm允许默认构建这样的脚本。人们去gulpgruntContinuous Integration其他此类建成的工具。 Uglify是您只需要一次用于生产目的的东西,但是假设您想在每次文件更改时运行tests,或者想要使用JSLint。那么,我知道很多这些插件提供了Continous Integration的支持,但并非所有插件都支持。 Gulp,`Grunt```和其他这样的构建工具随附解决方案。

但我看到越来越多的人从gulp,grunt移动到基本npm,我完全支持这个动作。

+0

我同意并希望分享有关如何使用npm作为构建工具的非常好的文章:http://blog.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/ – mantoni