/** * @param {string} from copy src * @param {string} to copy target * @desc like shell command mv */ function mv(from, to){ if(!FS.existsSync(from)){ if(FS.existsSync(to)){ rm(to); } return; } if(FS.statSync(from).isDirectory()){ // if is a directory, mkdir mkdir(to); }else{ // if is a file, compare first if(FS.existsSync(to)){ if(FS.readFileSync(from, 'utf-8') !== FS.readFileSync(to, 'utf-8')){ // if there were any other way to compare two files mvinner(from, to); } }else{ mvinner(from, to); } } function mvinner(f, t){ var dir = PATH.dirname(t); mkdir(dir); FS.writeFileSync(t, FS.readFileSync(f)); } }
ll.forEach(function(name){ var fpath = PATH.join(from, name); if(FS.statSync(fpath).isDirectory()){ compareDist2Src(fpath); }else{ // get from cache if(!(fpath in __existList)){ rm(fpath); } } })
execGrunt(gruntPath, function(){ // 将lib复制回去 transportCopy(excludeSrc, excludeDst); // 删除transport的src rm(src); }, callback);
/** * @param {string} src * @param {string} dest * @param {object} alias * @param {function} callback * @returns {undefined} */ function transportTask(src, dest, alias, gruntPath, callback, exclude) { // 先复制源文件,默认不复制src下的lib文件夹(需要先删除dest下面的lib) exclude ? null : exclude = 'lib'; var excludeSrc = PATH.join(src, exclude).replace(/(\\|\/)$/, ''); var excludeDst = PATH.join(dest, exclude).replace(/(\\|\/)$/, ''); transportCopy(src, dest, excludeSrc); rm(excludeDst); var transport = "{\ transport4css: {\ options: {\ debug: false,\ uglify: true,\ parsers: {\ '.css': [css2jsParser]\ }\ },\ files: [{\ expand: true,\ cwd: '" + dest + "',\ src: '**/*.css',\ dest: '" + dest + "'\ }]\ },\ transport4js: {\ options: {\ debug: false,\ alias: " + JSON.stringify(alias) + "\ },\ files: [\ {\ expand: true,\ cwd: '" + dest + "',\ src: '**/*.js',\ dest: '" + dest + "'\ }\ ]\ }\ }"; var output = '\ module.exports = function(grunt){\ var style = require("grunt-cmd-transport").style.init(grunt);\ var css2jsParser = style.css2jsParser;\ var jsParser = require("grunt-cmd-transport").script.init(grunt).jsParser;\ grunt.initConfig({\ pkg: grunt.file.readJSON("package.json"),\ transport:' + transport + '});\ grunt.loadNpmTasks("grunt-cmd-transport");\ grunt.registerTask("default", ["transport"]);\ };'; FS.writeFileSync(PATH.join(gruntPath,'Gruntfile.js'), output, 'utf-8'); execGrunt(gruntPath, function(){ // 将lib复制回去 transportCopy(excludeSrc, excludeDst); // 删除transport的src rm(src); }, callback); }