Advertisement
Guest User

Untitled

a guest
May 23rd, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.30 KB | None | 0 0
  1. var gulp = require('gulp');
  2. var path = require('path');
  3. var fs = require('fs');
  4. var $ = require('gulp-load-plugins')();
  5. var colors = require('colors');
  6. var runSequence = require('run-sequence')
  7. var through = require('through2');
  8. var filter = require('gulp-filter');
  9. var gutil = require('gulp-util');
  10. var spritesmith = require('gulp.spritesmith');
  11. var del = require('del');
  12. var gulpif = require('gulp-if');
  13. var less = require('gulp-less');
  14. var watch = require('gulp-watch');
  15. var connect = require('gulp-connect');
  16. var webpack = require('webpack-stream');
  17. var uglify = require('gulp-uglify');
  18. var cssmin = require('gulp-cssmin');
  19. var htmlmin = require('gulp-htmlmin');
  20. var imagemin = require('gulp-imagemin');
  21. var rev = require('gulp-rev');
  22. var revReplace = require('gulp-rev-replace');
  23. var print = require('gulp-print');
  24. var replace = require('gulp-replace');
  25. var prefix = require('gulp-prefix');
  26. var Ftp = require('ftp');
  27. var Pem = require('pem');
  28. var slash = require('slash');
  29. var debug = require('gulp-debug');
  30.  
  31. var packageJson = JSON.parse(fs.readFileSync('./package.json'));
  32.  
  33. var projectDirPath = packageJson.sftp.dirPath + packageJson.project;
  34.  
  35. var cdnPath = packageJson.cdnDomain + projectDirPath;
  36.  
  37. gulp.task('sprite', function() {
  38. var spriteOptions = require('./gulp/options/sprites')();
  39. Object.keys(spriteOptions).map(function(key, index) {
  40. var item = spriteOptions[key];
  41. // console.log('--------------------------------------------');
  42. // console.log(item);
  43. var spriteData = gulp.src(item.src).pipe(spritesmith(item));
  44.  
  45. spriteData.img.pipe(gulp.dest('image'));
  46. spriteData.css.pipe(gulp.dest('less'));
  47. });
  48. });
  49.  
  50. gulp.task('less', function() {
  51. // var cssStream = gulp.src(['../less/**/*.less', '!../less/include/*.less'])
  52.  
  53. // var lessModifyVars = createLessMofifyVars('../image/sprites/*.png');
  54. // var lessModifyVars = createLessMofifyVars(['../image/sprites/**/*', '../image/page/**/*']);
  55. return gulp.src('less/**/*.less')
  56. .pipe(less({
  57. // paths: [path.join(__dirname, '../less', 'include')],
  58. modifyVars: {
  59. "imgPath": "\"/image\""
  60. }
  61. }))
  62. .pipe(gulp.dest('style'))
  63. .pipe(connect.reload());
  64. });
  65.  
  66. gulp.task('webpack', function() {
  67. return gulp.src('script/page/index.js')
  68. .pipe(webpack(require('./gulp/webpack.config.js')))
  69. .pipe(gulp.dest('script/dest/'))
  70. .pipe(connect.reload());
  71. });
  72.  
  73. gulp.task('watch', function () {
  74. // livereload.listen();
  75. gulp.watch('less/**/*.less', ['less']);
  76.  
  77. gulp.watch(['script/index.js', 'script/module/**/*.js'], ['webpack']);
  78. });
  79.  
  80. gulp.task('webserver:dev', function() {
  81. connect.server({
  82. root: './',
  83. port: 8081,
  84. livereload: true
  85. });
  86. });
  87.  
  88. gulp.task('webserver:deploy', function() {
  89. connect.server({
  90. root: './dist',
  91. port: 8081,
  92. livereload: false
  93. });
  94. });
  95.  
  96. gulp.task('minifyHtml', function() {
  97. return gulp.src('html/*.html')
  98. .pipe(htmlmin({
  99. minifyCSS: true,
  100. minifyJS: true,
  101. collapseWhitespace: false
  102. }))
  103. .pipe(gulp.dest('dist/html'));
  104. });
  105.  
  106. gulp.task('clean', function (cb) {
  107. return del([
  108. 'dist/**',
  109. 'style/**',
  110. 'script/dest/**',
  111. ], {force: true}, cb);
  112. });
  113.  
  114. gulp.task('dev', function (done) {
  115. runSequence(
  116. ['clean'],
  117. ['sprite'],
  118. ['less'],
  119. ['webpack'],
  120. ['webserver:dev'],
  121. ['watch'],
  122. done);
  123. });
  124.  
  125. gulp.task('deploy', function (done) {
  126. runSequence(
  127. ['clean'],
  128. ['sprite'],
  129. ['less'],
  130. ['webpack'],
  131. ['minifyHtml'],
  132. ['rev'],
  133. ['htmlReplace'],
  134. ['cssReplace'],
  135. // ['sftp:files'],
  136. // ['sftp:upload'],
  137. ['webserver:deploy'],
  138. done);
  139. });
  140.  
  141. gulp.task('rev', function(){
  142. var cssFilter = filter('**/*.css', { restore: true });
  143. var jsFilter = filter('**/*.js', { restore: true });
  144. var imageFilter = filter('**/*.png', { restore: true });
  145.  
  146. return gulp.src(['style/**/*', 'script/dest/**/*', 'image/page/**/*', 'image/sprites/**/*'], {base: '.'})
  147. .pipe(cssFilter)
  148. // .pipe(print())
  149. .pipe(cssmin())
  150. .pipe(cssFilter.restore)
  151. .pipe(jsFilter)
  152. .pipe(uglify())
  153. .pipe(jsFilter.restore)
  154. .pipe(imageFilter)
  155. .pipe(imagemin())
  156. .pipe(imageFilter.restore)
  157. .pipe(rev())
  158. .pipe(gulp.dest('dist'))
  159. .pipe(rev.manifest())
  160. .pipe(gulp.dest('dist'))
  161. });
  162.  
  163. gulp.task('htmlReplace', function(){
  164. var manifest = gulp.src('./dist/rev-manifest.json');
  165.  
  166. return gulp.src('./dist/html/**/*.html', {base: '.'})
  167. .pipe(revReplace({manifest: manifest}))
  168. // .pipe(prefix(cdnPath, null, '{{'))
  169. .pipe(replace(/([href|src]+?\=[\"\'])(\.\.)(\/[script|style|image]+)/gi, function ($0, $1, $2, $3) {
  170. return $1 + cdnPath + $3;
  171. }))
  172. .pipe(gulp.dest('./'));
  173. });
  174.  
  175. gulp.task('cssReplace', function(){
  176. var manifest = gulp.src('./dist/rev-manifest.json');
  177.  
  178. return gulp.src(['./dist/style/**/*.css'], {base: '.'})
  179. .pipe(revReplace({manifest: manifest}))
  180. .pipe(replace('/image/', cdnPath + '/image/'))
  181. .pipe(gulp.dest('./'));
  182. });
  183.  
  184. var sftpFiles = [];
  185.  
  186. gulp.task('sftp:files', function(cb){
  187. return gulp.src(['./dist/style/**', './dist/script/**', './dist/image/**'])
  188. .pipe(through.obj(function(file, encode, cb) {
  189. if (!file.isNull()) {
  190. // console.log('--------------------------------------------');
  191. // console.log(slash(path.relative(path.resolve(process.cwd(), 'dist'), file.path)));
  192. sftpFiles.push(slash(path.relative(path.resolve(process.cwd(), 'dist'), file.path)))
  193. }
  194. cb(null, file, encode);
  195. }));
  196. });
  197.  
  198. gulp.task('sftp:upload', function(cb){
  199. var ftp = new Ftp();
  200. var ftpFiles = [];
  201.  
  202. ftp.on('ready', function() {
  203. gutil.log('[INFO] ftp connect ready!!!!');
  204. ftp.cwd(projectDirPath, function (err) {
  205. if (err) {
  206. gutil.log('[INFO] ftp mkdir ' + projectDirPath.green);
  207. ftp.mkdir(projectDirPath, true, function() {
  208. startFtp();
  209. });
  210. } else {
  211. startFtp();
  212. }
  213. });
  214. });
  215.  
  216. function startFtp() {
  217. gutil.log('[INFO] ftp start!!!!');
  218. var walkInto = function (src, callback) {
  219. gutil.log('[INFO] ftp list src = ' + src);
  220. ftp.list(src, function (err, files) {
  221. var pending = files.length;
  222. if (!pending) return callback();
  223. files.forEach(function (item) {
  224. var filePath = src + item.name;
  225. if (item.type === 'd') {
  226. filePath = filePath + '/';
  227. walkInto(filePath, function(err, res){
  228. if (!--pending) {
  229. callback();
  230. }
  231. });
  232. } else {
  233. ftpFiles.push(filePath.replace(projectDirPath + '/', ''));
  234. if (!--pending) {
  235. callback();
  236. }
  237. }
  238. });
  239. });
  240. };
  241.  
  242. walkInto(projectDirPath + '/', function () {
  243. var newFiles = sftpFiles.filter(function (file) {
  244. var flag = true;
  245.  
  246. if (ftpFiles.indexOf(file) !== -1) {
  247. flag = false;
  248. }
  249. return flag;
  250. });
  251. uploadFiles(newFiles);
  252. });
  253. }
  254.  
  255. function uploadFiles(newFiles) {
  256. gutil.log('[INFO] ftp uploading!!!!');
  257. var i = 0;
  258.  
  259. var filesLength = newFiles.length;
  260. if (newFiles.length != 0) {
  261. gutil.log("[INFO]" + new String(filesLength) + " 个文件需要上传.");
  262. newFiles.forEach(function(file) {
  263. var destPath = projectDirPath + file;
  264. ftp.mkdir(destPath.match(/(.*)\/.*/)[1], true, function() {
  265. ftp.put(file, destPath, function(err) {
  266. if (err) {
  267. gutil.log(err);
  268. }
  269. i++;
  270. gutil.log('[INFO] File ' + destPath.cyan + ' uploaded.' + ' 还有 ' + new String(filesLength - i).cyan + ' 个文件需要上传.');
  271. if (i == filesLength) {
  272. ftp.end();
  273. gutil.log('upload Done!'.green)
  274. cb();
  275. }
  276. });
  277. })
  278. });
  279. } else {
  280. gutil.log('[INFO] no file to upload!'.green)
  281. ftp.end();
  282. cb();
  283. }
  284. };
  285.  
  286. Pem.createCertificate({}, function(err, keys) {
  287. if (err) {
  288. gutil.log(err)
  289. }
  290. keys = keys || {};
  291.  
  292. var options = packageJson.sftp;
  293.  
  294. ftp.connect({
  295. host: options.auth.host,
  296. port: options.auth.port,
  297. user: options.auth.user.username,
  298. password: options.auth.user.password,
  299. secure: options.auth.secure,
  300. secureOptions: {
  301. key: undefined,
  302. cert: undefined,
  303. requestCert: true,
  304. rejectUnauthorized: false
  305. }
  306. });
  307. });
  308. });
  309.  
  310. gulp.task('default', function() {
  311. // 将你的默认的任务代码放在这
  312. console.log('default task');
  313. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement