Grunt和Gulp是javascript世界里的用来做自动压缩、Typescript编译、代码质量lint工具、CSS预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作。Grunt和Gulp都在Visual studio 2015中得到支持。ASP.NET 项目模板默认使用Gulp。
Grunt和Gulp有什么区别?Gulp虽然是稍微晚一点登场的,但是它因crisp performance和优雅的语法受到欢迎。与Grunt不同,Grunt往往在硬盘上是读写文件,Gulp使用流式的API去链式的调用方法,Grunt是早些出现的客户端构建工具,Grunt预定义了大多数经常要做的压缩和单元测试等工作。Grunt每天都有数以千计的下载和应用。
这个实例使用Empty ASP.NET项目模板来展示自动化的客户端构建工作。非空的ASP.NET项目模板默认使用Gulp。
最终示例清理目标部署目录,合并Javascript文件,检查代码质量,压缩Javascript文件内容并且部署到web项目的跟目录,我们将使用以下包:
grunt:任务执行者包;
grunt-contrib-clean:一个用来移除文件和目录的任务
grunt-contrib-jshint:一个审查代码质量的任务
grunt-contrib-concat:一个连接多文件在一个文件中的任务
grunt-contrib-uglify:一个压缩和缩小文件尺寸的任务
grunt-contrib-watch:一个检测文件活动的任务
首先,创建信的空的Web应用程序添加示例的Typescript文件,Typescript文件在Visual Studio 2015的默认设置下,会自动地编译为Javascript中并且作为Grunt的源文件。
enum Tastes { Sweet, Sour, Salty, Bitter }
class Food { constructor(name: string, calories: number) { this._name = name; this._calories = calories; } PRivate _name: string; get Name() { return this._name; } private _calories: number; get Calories() { return this._calories; } private _taste: Tastes; get Taste(): Tastes { return this._taste } set Taste(value: Tastes) { this._taste = value; }}
下一步,配置npm来下来grunt和grunt-tasks
这些包将会被自动下载,你可以在node-modules目录下看到下载的内容,前提是你打开了”显示所有文件“
如果需要的话,你要可以通过右键单击dependences下的NPM,选择Restore Packages按钮恢复这些包
Grunt使用名为gruntfile.js的文件清单进行配置、加载和注册任务,让它可以手动的运行或者基数Vistual Studio的事件机制自动运行
module.exports = function (grunt) { grunt.initConfig({ });};
module.exports = function (grunt) { grunt.initConfig({ clean: ["wwwroot/lib/*", "temp/"], });};
grunt.loadNpmTasks("grunt-contrib-clean");
module.exports = function (grunt) { grunt.initConfig({ clean: ["wwwroot/lib/*", "temp/"], }); grunt.loadNpmTasks("grunt-contrib-clean");};
module.exports = function (grunt) { grunt.initConfig({ clean: ["wwwroot/lib/*", "temp/"], concat: { all: { src: ['TypeScript/Tastes.js', 'TypeScript/Food.js'], dest: 'temp/combined.js' } }, }); grunt.loadNpmTasks("grunt-contrib-clean");};
jshint: { files: ['temp/*.js'], options: { '-W069': false, } }
uglify: { all: { src: ['temp/combined.js'], dest: 'wwwroot/lib/combined.min.js' }},
module.exports = function (grunt) { grunt.initConfig({ clean: ["wwwroot/lib/*", "temp/"], concat: { all: { src: ['TypeScript/Tastes.js', 'TypeScript/Food.js'], dest: 'temp/combined.js' } }, jshint: { files: ['temp/*.js'], options: { '-W069': false, } }, uglify: { all: { src: ['temp/combined.js'], dest: 'wwwroot/lib/combined.min.js' } }, }); grunt.loadNpmTasks("grunt-contrib-clean"); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-uglify');};
使用grunt.registerTask方法来注册运行一系列指定顺序的任务,比如,运行上文中任务的顺序应该为clean->concat->jshint->uglify。在文件中添加以下代码,并且保持方法调用和loadNpmTasks调用时同级的
新闻热点
疑难解答