-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.js
89 lines (84 loc) · 2.69 KB
/
gulpfile.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const gulp = require('gulp')
const { readFileSync, mkdirSync, writeFileSync, createReadStream, createWriteStream, rmdirSync } = require('fs')
const rimraf = require('rimraf')
const exec = require('child_process').exec
const archiver = require('archiver')
const createZip = () => archiver('zip', { zlib: { level: 9 } })
const command = command => new Promise((resolve, reject) => {
exec(command, (err, stdout, stderr) => {
if (err) reject(err)
if (stderr) reject(stdout + stderr)
resolve(stdout)
})
})
const removeDir = path => new Promise((resolve, reject) => rimraf(path, err => err ? reject() : resolve()))
const copyFile = (source, destination) => {
const file = readFileSync(source)
writeFileSync(destination, file)
}
const removeDistBuild = () => removeDir('./build-distribution')
const removeDistTemp = () => removeDir('./server')
const removeDistFolder = () => removeDir('./dist')
const createDistTemp = () => mkdirSync('./server')
const createDistFolder = () => mkdirSync('./dist')
const getPackageJsonObject = () => JSON.parse(readFileSync('package.json'))
const getNewPackageJsonObject = () => {
const package = getPackageJsonObject()
const {
name,
version,
description,
author,
repository,
license,
dependencies,
} = package
const newPackage = {
name,
version,
description,
main: './index.js',
scripts: {
launch: 'node ./index.js'
},
author,
repository,
license,
dependencies,
}
return newPackage
}
const writePackageJsonToTemp = (packageJsonObject) => {
const packageJsonString = JSON.stringify(packageJsonObject, undefined, 2)
writeFileSync('./server/package.json', packageJsonString)
}
const copyLicenseToTemp = () => copyFile('LICENSE.txt', './server/LICENSE.txt')
const copyReadmeToTemp = () => copyFile('README.md', './server/README.md')
const copyBuildToTemp = () => copyFile('build-distribution/index.js', './server/index.js')
const createDistZip = () => {
createDistFolder()
const archive = createZip()
archive.directory('server')
var output = createWriteStream(__dirname + '/dist/server.zip');
archive.pipe(output)
archive.finalize()
return new Promise((resolve, reject) => {
output.on('close', () => resolve())
archive.on('error', err => reject(err))
})
}
gulp.task('dist', async () => {
await removeDistFolder()
await removeDistTemp()
createDistTemp()
const newPackageJsonObject = getNewPackageJsonObject()
writePackageJsonToTemp(newPackageJsonObject)
copyLicenseToTemp()
copyReadmeToTemp()
const buildLog = await command('npm run build-distribution')
console.log(buildLog)
copyBuildToTemp()
await createDistZip()
await removeDistBuild()
await removeDistTemp()
})