1 | #!/usr/bin/env node
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | const path = require('path')
|
14 | const program = require('commander')
|
15 | const chalk = require('chalk')
|
16 | const {
|
17 | checkNodeVersion,
|
18 | cleanArgs,
|
19 | info,
|
20 | getPwd,
|
21 | getSecret,
|
22 | getProjectConfig,
|
23 | paramChecker,
|
24 | } = require('../lib/util')
|
25 |
|
26 |
|
27 | const requiredVersion = require('../package.json').engines.node
|
28 | checkNodeVersion(requiredVersion, '@ifun/deploy')
|
29 |
|
30 |
|
31 | const globalConfigPath = path.resolve(__dirname, '../config/config.global.json')
|
32 |
|
33 | delete require.cache[require.resolve(globalConfigPath)]
|
34 |
|
35 | const globalConfig = require(globalConfigPath)
|
36 |
|
37 |
|
38 | program
|
39 | .version(require('../package').version)
|
40 | .usage('<action> [options]')
|
41 |
|
42 |
|
43 | program
|
44 | .command('config <action> [key] [value]')
|
45 | .option('-a, --all', '是否读取全部配置')
|
46 | .action((action, key, value, cmd) => {
|
47 | const tempOptions = cleanArgs(cmd)
|
48 |
|
49 | const options = {
|
50 | ...tempOptions,
|
51 | key,
|
52 | value,
|
53 | }
|
54 |
|
55 | require(`../lib/${action}`)(options)
|
56 | })
|
57 |
|
58 |
|
59 | program
|
60 | .command('app <scheme>')
|
61 | .option('-w, --web [web]', 'web服务器')
|
62 | .option('-u, --user [user]', 'web服务器用户名')
|
63 | .option('-d, --dir [dir]', '要部署到web服务器的目录')
|
64 | .action(async (scheme, cmd) => {
|
65 |
|
66 | const projectConfig = getProjectConfig(scheme)
|
67 | const tempOptions = cleanArgs(cmd)
|
68 |
|
69 | let { pwd } = projectConfig
|
70 | pwd || (pwd = await getPwd())
|
71 |
|
72 | |
73 |
|
74 |
|
75 | const options = {
|
76 | ...globalConfig,
|
77 | ...projectConfig,
|
78 | ...tempOptions,
|
79 | scheme,
|
80 | pwd,
|
81 | }
|
82 |
|
83 | paramChecker(options)
|
84 |
|
85 | require(`../lib/deploy`)(options)
|
86 | })
|
87 |
|
88 |
|
89 | program
|
90 | .command('oss <name>')
|
91 | .option('-i, --accessKeyId <accessKeyId>', 'oss accessKeyId')
|
92 | .option('-s, --accessKeySecret <accessKeySecret>', 'oss accessKeySecret')
|
93 | .option('-p [publicDir]', '项目内要部署到OSS服务器的文件目录')
|
94 | .option('-b [bucket]', 'oss服务器bucket')
|
95 | .option('-r [region]', 'oss服务器region')
|
96 | .option('-a [assets]', 'oss服务器上放置静态资源的目录')
|
97 | .action(async (scheme, cmd) => {
|
98 |
|
99 | const projectConfig = getProjectConfig(scheme)
|
100 | const tempOptions = cleanArgs(cmd)
|
101 | const accessKeySecret = await getSecret()
|
102 |
|
103 | const options = {
|
104 | ...globalConfig,
|
105 | ...projectConfig,
|
106 | ...tempOptions,
|
107 | scheme,
|
108 | accessKeySecret,
|
109 | }
|
110 |
|
111 | paramChecker(options)
|
112 |
|
113 | require(`../lib/deploy-oss`)(options)
|
114 | })
|
115 |
|
116 |
|
117 | program.on('--help', () => {
|
118 | info(`\n Run ${chalk.cyan(`deploy <command> --help`)} for detailed usage of given command.\n`)
|
119 | })
|
120 |
|
121 | program.commands.forEach(c => c.on('--help', () => console.log()))
|
122 |
|
123 | program.parse(process.argv)
|
124 |
|
125 | process.on('SIGINT', () => {
|
126 | process.exit(0)
|
127 | })
|