-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwatch.js
64 lines (56 loc) · 1.64 KB
/
watch.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
const chalk = require('chalk')
const util = require('util')
const fs = require('fs-extra')
const path = require('path')
const babel = require('@babel/core')
const chokidar = require('chokidar')
console.clear()
const src = 'src'
const dest = 'dist'
const srcToDest = srcfile => dest + srcfile.slice(src.length)
const srcToFile = srcfile => srcfile.slice(src.length + 1)
const transformFile = async (...args) => new Promise((resolve, reject) => {
babel.transformFile(...args, (error, result) => {
if (error)
reject(error)
else
resolve(result)
})
})
const smartTransformFile = async (srcfile) => {
const destfile = srcToDest(srcfile)
const result = await transformFile(srcfile)
await fs.outputFile(destfile, result.code)
}
const onUnlink = async srcfile => {
await fs.remove(srcToDest(srcfile))
console.log(chalk.redBright('-', srcToFile(srcfile)))
}
const onAdd = async srcfile => {
if (srcfile.endsWith('.js')) {
await smartTransformFile(srcfile)
console.log(chalk.blueBright('+', srcToFile(srcfile)))
}
else {
await fs.copy(srcfile, srcToDest(srcfile))
console.log(chalk.greenBright('+', srcToFile(srcfile)))
}
}
const onChage = async srcfile => {
if (srcfile.endsWith('.js')) {
await smartTransformFile(srcfile)
console.log(chalk.blueBright('↺', srcToFile(srcfile)))
}
else {
await fs.copy(srcfile, srcToDest(srcfile))
console.log(chalk.greenBright('↺', srcToFile(srcfile)))
}
}
const watcher = chokidar.watch(src, {
ignoreInitial: false
})
watcher.on('add', onAdd)
watcher.on('change', onChage)
watcher.on('unlink', onUnlink)
watcher.on('unlinkDir', onUnlink)
require('./express.js')