-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathbuild.js
77 lines (64 loc) · 2.59 KB
/
build.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
'use strict'
require('./check-versions')()
process.env.NODE_ENV = 'production'
process.env.npm_config_platform = process.env.npm_config_platform ? process.env.npm_config_platform : ''
process.env.npm_config_environment = process.env.npm_config_environment ? process.env.npm_config_environment : 'production'
const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')
const spinner = ora('building for production...')
const packageJson = require('../package.json')
const archiver = require('archiver')
const fs = require('fs')
const format = require('date-fns/format')
spinner.start()
// step 1: clear build directory
rm(path.join(config.build.assetsRoot, process.env.npm_config_platform), err => {
if (err) throw err
// step 2: build project with webpack
webpack(webpackConfig, (err, stats) => {
spinner.stop()
if (err) throw err
process.stdout.write(stats.toString({
colors: true,
modules: false,
children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
chunks: false,
chunkModules: false
}) + '\n\n')
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'))
process.exit(1)
}
console.log(chalk.cyan(' Build complete.\n'))
console.log(chalk.yellow(
' Tip: built files are meant to be served over an HTTP server.\n' +
' Opening index.html over file:// won\'t work.\n'
))
// step 3: archive dist folder as zip
const packageName = `${packageJson.name}_${process.env.npm_config_environment}_${packageJson.version}.` +
`${packageJson.build}_${process.env.npm_config_platform}_${format(new Date(), 'YYYYMMDD')}.` +
`${process.env.npm_config_platform === 'tizen' ? 'wgt' : 'zip'}`
rm(path.join(config.build.archiveRoot, packageName), err => {
if (err) throw err
if (!fs.existsSync(config.build.archiveRoot)) {
fs.mkdirSync(config.build.archiveRoot)
}
const output = fs.createWriteStream(path.join(config.build.archiveRoot, packageName))
const archive = archiver('zip')
archive.on('error', (err) => {
if (err) throw err
})
archive.on('close', () => {
console.log(chalk.green(`created archive: ${path.join(config.build.archiveRoot, packageName)}\n`))
})
archive.pipe(output)
archive.directory(webpackConfig.output.path, false)
archive.finalize()
})
})
})