今天又完善了一下Grunt的Task,增加了JSHint和Watch功能,再修改了每个NodeJs代码之后,会运行JSHint对代码进行检查。修改了LESS文件之后,会重现编译LESS为CSS代码:
"use restrict"; var _ = require('underscore') , path = require('path') , fs = require('fs'); var scriptFiles = _.chain({ self: ['*.js'], test: ['../Test/*.js', '../Test/test/*.js', '../Test/FakedWebService/*.js', '../Test/FakedWebService/*/*.js'], webSite: ['../WebSite/*.js', '../WebSite/*/*.js'], webService: ['../WebService/*.js', '../WebService/*/*.js'] }).values().flatten().value(); var lessFilePairs = [ { "../WebSite/public/css/site.css": "../WebSite/public/less/site.less" }, { "../WebSite/public/css/page_send_report.css": "../WebSite/public/less/page_send_report.less" }, { "../WebSite/public/css/page_data_mining.css": "../WebSite/public/less/page_data_mining.less" }, { "../WebSite/public/css/page_bucket_table.css": "../WebSite/public/less/page_bucket_table.less" } ]; module.exports = function (grunt) { grunt.initConfig({ ftpscript: { uploadFixRateData: { options: { host: 'cadcptdgaop5', port: 21, passive: false }, files: [ { expand: true, cwd: './tmp', src: ['fixed_report_count.txt'], dest: '/data/' } ] } }, shell: { exportFixRateData: { command: '../WebService/DbAdmin.exe -e tmp/fixed_report_count.txt', options: { async: false, stdout: true } } }, less: { dev: { options: { paths: ["../WebSite/public/less"] }, files: lessFilePairs }, prod: { options: { paths: ["../WebSite/public/less"], yuicompress: true }, files: lessFilePairs } }, mochacli: { options: { //require: ['should'], files: '../Test/test/*.js' }, spec: { options: { reporter: 'spec' } }, "default": { } }, jshint: { options: { laxcomma: true, // Allow comma-first coding style expr: true, // Be compatible with the "cute" shouldJs globals: { node: true, mootools: true } }, "default": scriptFiles }, watch: { scripts: { files: scriptFiles, tasks: ['jshint'], options: { debounceDelay: 250 } }, less: { files: "../WebSite/public/less/*.less", tasks: ['less:dev'], options: { debounceDelay: 250 } } } }); require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); // Help // grunt.registerTask( "default", "Help", function () { console.log(fs.readFileSync('ReadMe.txt').toString()); } ); // Backup and Restore // grunt.registerTask( "backup_fix_rate_data", "upload exported fix rate data to backup server", ["shell:exportFixRateData", "ftpscript:uploadFixRateData"]); // Build & Compile // grunt.registerTask( "dev", "Compile and make", ["less:dev"], ["watch"]); grunt.registerTask( "prod", "Compile and release", ["less:prod"]); grunt.registerTask( "ut", "Run Mocha Unit Test", ['mochacli:default']); grunt.registerTask( "spec", "Run Mocha Unit Test", ['mochacli:spec']); };
在研究JSHint的时候,发现,原来还有个JSLint,JSHint是基于JSLint的并做了改进。
另外,使用Should库的时候,JSHint会报错,他认为should库使用表达式作为语句运行时不规范的,例如 something.should.be.ok;我也看到了TJ大神与某个人的辩论,TJ认为,shouldJs库是可爱的,而且Unit Test框架应该可爱些,TJ是不会妥协的:https://github.com/visionmedia/should.js/issues/9,解决方法很简单,修改JSHint的参数就可以了。没啥大不了的。