Skip to content
This repository was archived by the owner on Mar 31, 2024. It is now read-only.

Commit b070432

Browse files
committed
feat: Add building script
1 parent 0c719c2 commit b070432

File tree

6 files changed

+170
-4
lines changed

6 files changed

+170
-4
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
node_modules
22
out
33
dist
4-
app-builds
4+
app-builds
5+
package-release

README.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ Example config for browser:
9595
Example config for PC (You can also use a relative path):
9696
```json
9797
{
98-
"game_assets_root": "D:\GameProjects\hello-avg",
98+
"game_assets_root": "D:\\GameProjects\\hello-avg",
9999
"engine_bundle_root": "data"
100100
}
101101
```
@@ -136,3 +136,17 @@ If your game assets folder is addressable, you can see a game window launched an
136136
- [ ] Save & Load
137137
- [ ] UI Designer
138138
- [ ] Packaging Tools
139+
140+
141+
## Buiding Problems
142+
143+
- `electron` & `node-sass` install failed or takes a long time
144+
Due to `electron-prebuilt` and `node-sass` deploy on Github, it causing a problem of downloading. Especially in China, it will take a long time when you run `yarn`. To resolve the problem, you could use the following solution:
145+
146+
```
147+
ELECTRON_MIRROR="https://npm.taobao.org/mirrors/electron/" yarn add electron -D
148+
SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ yarn add node-sass -D
149+
```
150+
151+
This changes the downloading mirror to `Taobao` in China.
152+
But it should be noted this solution is **different** from changing the registry of `yarn`.

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "avg-plus",
3-
"version": "0.1.13",
3+
"version": "0.1.22",
44
"description": "Powerful AVG Engine",
55
"homepage": "http://avg-engine.com",
66
"author": {
@@ -80,6 +80,7 @@
8080
"@types/jquery": "^3.3.2",
8181
"@types/node": "7.0.7",
8282
"@types/pixi.js": "^4.8.8",
83+
"@types/semver": "^6.2.0",
8384
"@typescript-eslint/eslint-plugin": "^1.9.0",
8485
"@typescript-eslint/parser": "^1.9.0",
8586
"adm-zip": "^0.4.13",
@@ -142,6 +143,7 @@
142143
"raw-loader": "0.5.1",
143144
"sass-loader": "6.0.6",
144145
"script-loader": "0.7.0",
146+
"semver": "^7.1.1",
145147
"shelljs": "^0.7.8",
146148
"source-map-loader": "0.2.1",
147149
"style-loader": "0.18.2",

tools/version-release.ts

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
2+
import * as program from 'commander';
3+
import { execSync, exec } from 'child_process';
4+
import * as fs from 'fs-extra';
5+
import * as path from 'path';
6+
import * as AdmZip from 'adm-zip';
7+
import * as semver from 'semver';
8+
9+
enum Platform {
10+
All = "all",
11+
Browser = "browser",
12+
Desktop = "desktop",
13+
}
14+
15+
const PackageFile = path.resolve(__dirname, "../package.json");
16+
17+
export function sleep(ms: number) {
18+
return new Promise<void>(res => setTimeout(res, ms));
19+
}
20+
21+
function readPackageInfo() {
22+
return JSON.parse(fs.readFileSync(PackageFile).toString("utf8"));
23+
}
24+
25+
program
26+
.option('-p, --platform [platform]', '要编译的平台')
27+
.option('-v, --version [buildVersion]', "发布的版本,在不同的版本标记上递增").description(`可选: major, premajor, minor, preminor, patch, prepatch, prerelease`)
28+
.option('-o, --output-directory [output]', '输出目录')
29+
30+
program.parse(process.argv);
31+
32+
console.log("[!] 构建平台: ", program.platform)
33+
34+
35+
// 设置默认参数
36+
if (!program.platform) {
37+
program.platform = Platform.All;
38+
}
39+
40+
if (!program.output) {
41+
program.output = path.join(__dirname, "../package-release");
42+
}
43+
44+
if (!program.buildVersion) {
45+
program.buildVersion = "patch";
46+
}
47+
48+
// 创建输出目录
49+
fs.mkdirpSync(program.output);
50+
51+
const buildingPlatforms = [];
52+
53+
if (program.platform === Platform.Browser) {
54+
buildingPlatforms.push(Platform.Browser)
55+
}
56+
57+
if (program.platform === Platform.Desktop) {
58+
buildingPlatforms.push(Platform.Desktop)
59+
}
60+
61+
if (program.platform === Platform.All) {
62+
buildingPlatforms.push(Platform.Browser)
63+
buildingPlatforms.push(Platform.Desktop)
64+
}
65+
66+
67+
buildingPlatforms.forEach((platform) => {
68+
69+
console.log(`[!] 开始构建 ${platform} ...`)
70+
71+
const cmd = exec(`yarn build:${platform}`);
72+
// const cmd = exec(`echo a`);
73+
cmd.stdout.on('data', (data) => {
74+
console.log(data);
75+
});
76+
77+
cmd.stderr.on('data', (data) => {
78+
console.error(data);
79+
});
80+
81+
cmd.on("exit", async (code: number) => {
82+
if (code !== 0) {
83+
console.log(`[X] ${platform} 构建失败`);
84+
return;
85+
}
86+
87+
let packageInfo = readPackageInfo();
88+
const originalVersion = `v${packageInfo.version}`;
89+
90+
console.log("[!] 更新版本信息 ... ")
91+
const newVersion = semver.inc(packageInfo.version, program.buildVersion);
92+
packageInfo.version = newVersion;
93+
fs.writeJSONSync(PackageFile, packageInfo, { spaces: 2 });
94+
95+
const newVersionWithTag = `v${newVersion}`;
96+
97+
console.log(`[!] 打包版本号:${newVersionWithTag} (${originalVersion} -> ${newVersionWithTag})`)
98+
99+
console.log("[!] 更新引擎配置文件 ... ")
100+
const buildOutputDir = path.resolve(__dirname, `../dist/${platform}`);
101+
const engineConfig = path.resolve(buildOutputDir, `engine.json`);
102+
const engineInfo = require(engineConfig);
103+
engineInfo.game_assets_root = "http://localhost:2336"
104+
engineInfo.version = packageInfo.version;
105+
106+
fs.writeFileSync(engineConfig, JSON.stringify(engineInfo, null, 2), { encoding: "utf8" })
107+
108+
console.log("[!] 开始打包...")
109+
const outputFile = path.resolve(__dirname, `../package-release/AVGPlus-${platform}-v${packageInfo.version}_alpha.zip`);
110+
111+
const zip = new AdmZip();
112+
zip.addLocalFolder(buildOutputDir);
113+
zip.writeZip(outputFile);
114+
console.log(`[!] 发布文件路径:${outputFile}`)
115+
116+
console.log(`\n[√] ✨ 版本 ${newVersionWithTag} 发布完成!`)
117+
})
118+
119+
})

tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"declaration": false,
1111
"skipLibCheck": true,
1212
"moduleResolution": "node",
13+
"resolveJsonModule": true,
1314
"emitDecoratorMetadata": true,
1415
"experimentalDecorators": true,
1516
"allowJs": true,

yarn.lock

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1577,6 +1577,13 @@
15771577
dependencies:
15781578
defer-to-connect "^1.0.1"
15791579

1580+
"@types/adm-zip@^0.4.32":
1581+
version "0.4.32"
1582+
resolved "https://registry.npm.taobao.org/@types/adm-zip/download/@types/adm-zip-0.4.32.tgz#6de01309af60677065d2e52b417a023303220931"
1583+
integrity sha1-beATCa9gZ3Bl0uUrQXoCMwMiCTE=
1584+
dependencies:
1585+
"@types/node" "*"
1586+
15801587
15811588
version "3.5.8"
15821589
resolved "https://registry.npm.taobao.org/@types/bluebird/download/@types/bluebird-3.5.8.tgz#242a83379f06c90f96acf6d1aeab3af6faebdb98"
@@ -1624,6 +1631,13 @@
16241631
resolved "https://registry.npm.taobao.org/@types/events/download/@types/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
16251632
integrity sha1-KGLz9Yqaf3w+eNefEw3U1xwlwqc=
16261633

1634+
"@types/fs-extra@^8.0.1":
1635+
version "8.0.1"
1636+
resolved "https://registry.npm.taobao.org/@types/fs-extra/download/@types/fs-extra-8.0.1.tgz#a2378d6e7e8afea1564e44aafa2e207dadf77686"
1637+
integrity sha1-ojeNbn6K/qFWTkSq+i4gfa33doY=
1638+
dependencies:
1639+
"@types/node" "*"
1640+
16271641
"@types/glob@*", "@types/glob@^7.1.1":
16281642
version "7.1.1"
16291643
resolved "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
@@ -1715,6 +1729,11 @@
17151729
resolved "https://registry.npm.taobao.org/@types/selenium-webdriver/download/@types/selenium-webdriver-2.53.43.tgz#2de3d718819bc20165754c4a59afb7e9833f6707"
17161730
integrity sha1-LePXGIGbwgFldUxKWa+36YM/Zwc=
17171731

1732+
"@types/semver@^6.2.0":
1733+
version "6.2.0"
1734+
resolved "https://registry.npm.taobao.org/@types/semver/download/@types/semver-6.2.0.tgz#d688d574400d96c5b0114968705366f431831e1a"
1735+
integrity sha1-1ojVdEANlsWwEUlocFNm9DGDHho=
1736+
17181737
"@types/sizzle@*":
17191738
version "2.3.2"
17201739
resolved "https://registry.npm.taobao.org/@types/sizzle/download/@types/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47"
@@ -2164,7 +2183,7 @@ [email protected]:
21642183
resolved "https://registry.npm.taobao.org/adm-zip/download/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736"
21652184
integrity sha1-ph7VrmkFw66lizplfSUDMJEFJzY=
21662185

2167-
adm-zip@^0.4.7, adm-zip@^0.4.9:
2186+
adm-zip@^0.4.13, adm-zip@^0.4.7, adm-zip@^0.4.9:
21682187
version "0.4.13"
21692188
resolved "https://registry.npm.taobao.org/adm-zip/download/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a"
21702189
integrity sha1-WX4vjMNnIVHhMH0+lc3bx1ZyMUo=
@@ -4768,6 +4787,11 @@ commander@^2.11.0, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, comm
47684787
resolved "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1573464028535&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
47694788
integrity sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=
47704789

4790+
commander@^4.1.0:
4791+
version "4.1.0"
4792+
resolved "https://registry.npm.taobao.org/commander/download/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83"
4793+
integrity sha1-VFmDoGA/5CW8Zy1myePInEISGoM=
4794+
47714795
commander@~2.1.0:
47724796
version "2.1.0"
47734797
resolved "https://registry.npm.taobao.org/commander/download/commander-2.1.0.tgz?cache=0&sync_timestamp=1573464028535&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781"
@@ -14501,6 +14525,11 @@ semver@^4.1.0, semver@~4.3.3:
1450114525
resolved "https://registry.npm.taobao.org/semver/download/semver-4.3.6.tgz?cache=0&sync_timestamp=1565627380363&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
1450214526
integrity sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=
1450314527

14528+
semver@^7.1.1:
14529+
version "7.1.1"
14530+
resolved "https://registry.npm.taobao.org/semver/download/semver-7.1.1.tgz#29104598a197d6cbe4733eeecbe968f7b43a9667"
14531+
integrity sha1-KRBFmKGX1svkcz7uy+lo97Q6lmc=
14532+
1450414533
semver@~2.2.1:
1450514534
version "2.2.1"
1450614535
resolved "https://registry.npm.taobao.org/semver/download/semver-2.2.1.tgz?cache=0&sync_timestamp=1565627380363&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-2.2.1.tgz#7941182b3ffcc580bff1c17942acdf7951c0d213"

0 commit comments

Comments
 (0)