Advertisement
Guest User

Untitled

a guest
Aug 2nd, 2015
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.73 KB | None | 0 0
  1. path = require \path
  2. exec = require \child_process .exec
  3. browserSync = require \browser-sync .create!
  4.  
  5. # config {{{
  6. baseDir = '.'
  7.  
  8. outputDir = '.'
  9. cssOutputDir = "./css"
  10. jsOutputDir = "./js"
  11.  
  12.  
  13. reloadWatchFile = ''
  14. # "#outputDir/*.html"
  15. # "#jsOutputDir/*.js"
  16. # "HZ.WapApp.UI/Content/img/*.*"
  17.  
  18. compileWatchFile =
  19. "_source/live/*.ls"
  20. "docs/_source/jade/*.jade"
  21. "example/_source/jade/*.jade"
  22. "example/_source/live/*.ls"
  23.  
  24. autoCompileFile = false
  25. #autoCompileFile = true
  26. # }}}
  27. # getTimeToken {{{
  28. getTimeToken = ->
  29. currDate = new Date()
  30. hours = currDate.getHours()
  31. minutes = currDate.getMinutes()
  32. seconds = currDate.getSeconds()
  33. if hours < 10
  34. hours = "0#hours"
  35. if minutes < 10
  36. minutes = "0#minutes"
  37. if seconds < 10
  38. seconds = "0#seconds"
  39. "#hours:#minutes:#seconds"
  40. # }}}
  41. # compileTask {{{
  42. getCompileCmdAndFileName = (file, ext) ->
  43. filename = path.basename file, ext
  44. relativePath = path.relative baseDir, path.dirname(file)
  45. if path.sep isnt \/
  46. relativePath = relativePath.split path.sep .join \/
  47. file = file.split path.sep .join \/
  48.  
  49. switch ext
  50. case '.jade' then
  51. switch relativePath
  52. case 'docs/_source/jade'
  53. compileFileName = "#baseDir/docs/#{filename}.html"
  54. cmd = "jade -Po #baseDir/docs #file"
  55. case 'example/_source/jade'
  56. compileFileName = "#baseDir/example/#{filename}.html"
  57. cmd = "jade -Po #baseDir/example #file"
  58. default
  59. compileFileName = "#outputDir/#{filename}.html"
  60. cmd = "jade -Po #outputDir #file"
  61. case '.sass' then
  62. compileFileName = "#cssOutputDir/#{filename}.css"
  63. cmd = "sass --sourcemap=none --style compact #file|sed '/^@charset/d'>#compileFileName"
  64. case '.coffee' then
  65. compileFileName = "#jsOutputDir/#{filename}.js"
  66. cmd = "coffee --no-header -bco #jsOutputDir #file"
  67. case '.ls' then
  68. switch relativePath
  69. case '_source/live'
  70. compileFileName = "#baseDir/js/#{filename}.js"
  71. cmd = "lsc --no-header -cp #file>#compileFileName"
  72. case 'example/_source/live'
  73. compileFileName = "#baseDir/example/js/#{filename}.js"
  74. cmd = "lsc --no-header -cp #file>#compileFileName"
  75. default
  76. compileFileName = "#jsOutputDir/#{filename}.js"
  77. cmd = "lsc --no-header -co #jsOutputDir #file"
  78. default
  79. compileFileName = cmd = ''
  80. [cmd, compileFileName]
  81.  
  82. compileTask = (file, ext, reload) !->
  83. cmdIndex = -1
  84. try
  85. [cmd, filename] = getCompileCmdAndFileName file, ext
  86.  
  87. if not cmd or not filename
  88. console.log "cmd not define. file: #file ext: #ext"
  89.  
  90. # exec callback
  91. execCallback = (err, stdo, stde) !->
  92. if err is null and not stde
  93. if cmdIndex is -1
  94. console.log "[#{getTimeToken!}] compiled #filename"
  95. reload filename if reload
  96. else
  97. execCmd()
  98. else
  99. console.log err || stde
  100.  
  101. # execute command
  102. do execCmd = !->
  103. if Array.isArray cmd
  104. currCmd = cmd[++cmdIndex]
  105. if cmd.length <= cmdIndex+1
  106. ``cmdIndex = -1;``
  107. else
  108. currCmd = cmd
  109.  
  110. if currCmd
  111. exec currCmd, execCallback
  112.  
  113. compileCallback = (file) !->
  114. ext = path.extname file
  115. filename = path.basename file
  116.  
  117. # ignore partial file
  118. if filename.charAt(0) is '_'
  119. return undefined
  120.  
  121. switch ext
  122. case '.jade', '.coffee', '.ls', '.sass'
  123. # compileTask file, ext
  124. # case '.sass'
  125. compileTask file, ext, browserSync.reload
  126. default
  127. console.log 'unknown file type.'
  128. # }}}
  129. # browserSync {{{
  130. browserSync.init do
  131. server:
  132. baseDir: baseDir
  133. index: \index.html
  134. open: false
  135.  
  136. if reloadWatchFile and reloadWatchFile.length
  137. browserSync.watch reloadWatchFile
  138. .on \change, browserSync.reload
  139.  
  140. wacher = browserSync.watch compileWatchFile
  141. .on \change, compileCallback
  142.  
  143. # auto compile file
  144. if autoCompileFile
  145. wacher.on \add, compileCallback
  146. # }}}
  147.  
  148. # vim: set sw=2 ts=2 sts=2 et fdm=marker:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement