rigjs 2.1.29 → 3.0.0-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +146 -183
- package/README_CN.md +144 -141
- package/built/index.js +143 -173
- package/demo/package.json +8 -6
- package/demo/package.rig.json5 +64 -10
- package/demo/rig_dev/.gitkeep +0 -0
- package/demo/rig_helper.js +5 -9
- package/demo/vue.config.js +1 -1
- package/demo/yarn.lock +20 -7
- package/doc/cicd_cn.md +120 -0
- package/doc/cmd_cn.md +0 -0
- package/doc/dependencies.md +0 -0
- package/doc/dependencies_cn.md +28 -0
- package/doc/share_cn.md +8 -0
- package/jest/test.rig.json5 +14 -0
- package/jest.config.ts +10 -1
- package/lib/add/index.ts +37 -0
- package/lib/build/build.md +6 -0
- package/lib/build/index.ts +64 -59
- package/lib/classes/RigConfig.test.ts +14 -0
- package/lib/classes/RigConfig.ts +191 -0
- package/lib/classes/cicd/CICD.ts +6 -7
- package/lib/classes/cicd/CICDCmd.ts +1 -0
- package/lib/classes/cicd/DirLevel.ts +1 -1
- package/lib/classes/cicd/Endpoint.ts +7 -1
- package/lib/classes/dependencies/Dep.ts +56 -0
- package/lib/dev/index.ts +44 -0
- package/lib/init/index.ts +118 -0
- package/lib/install/{index.js → index.ts} +3 -6
- package/lib/postinstall/{index.js → index.ts} +12 -20
- package/lib/preinstall/index.ts +78 -0
- package/lib/print/index.ts +38 -0
- package/lib/publish/index.ts +4 -4
- package/lib/rig/index.ts +29 -13
- package/lib/sync/index.test.ts +4 -0
- package/lib/sync/index.ts +32 -0
- package/lib/utils/fsHelper.ts +37 -1
- package/lib/utils/objectHelper.ts +12 -0
- package/lib/utils/regexHelper.test.ts +12 -0
- package/lib/utils/{regex.ts → regexHelper.ts} +4 -1
- package/package.json +9 -8
- package/package.rig.json5 +8 -0
- package/tsconfig.json +4 -2
- package/demo/cicd.rig.json5 +0 -56
- package/lib/init/cicd.rig.json5 +0 -11
- package/lib/init/index.d.ts +0 -6
- package/lib/init/index.js +0 -189
- package/lib/init/rig_helper.js +0 -14
- package/lib/install/index.d.ts +0 -5
- package/lib/postinstall/index.d.ts +0 -6
- package/lib/preinstall/index.d.ts +0 -7
- package/lib/preinstall/index.js +0 -198
- package/lib/preinstall/index.test.js +0 -16
- package/lib/print/index.js +0 -33
package/demo/package.json
CHANGED
|
@@ -13,9 +13,10 @@
|
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"core-js": "^3.8.3",
|
|
16
|
-
"
|
|
16
|
+
"cross-env": "^7.0.3",
|
|
17
17
|
"rig-test-1": "git+ssh://git@github.com:FlashHand/rig-test-1.git#1.0.1",
|
|
18
|
-
"rig-test-2": "git+ssh://git@github.com:FlashHand/rig-test-2.git#1.0.
|
|
18
|
+
"rig-test-2": "git+ssh://git@github.com:FlashHand/rig-test-2.git#1.0.2",
|
|
19
|
+
"vue": "^2.6.14"
|
|
19
20
|
},
|
|
20
21
|
"devDependencies": {
|
|
21
22
|
"@babel/core": "^7.12.16",
|
|
@@ -25,8 +26,8 @@
|
|
|
25
26
|
"@vue/cli-service": "~5.0.0",
|
|
26
27
|
"eslint": "^7.32.0",
|
|
27
28
|
"eslint-plugin-vue": "^8.0.3",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
29
|
+
"json5": "2.2.1",
|
|
30
|
+
"vue-template-compiler": "^2.6.14"
|
|
30
31
|
},
|
|
31
32
|
"eslintConfig": {
|
|
32
33
|
"root": true,
|
|
@@ -49,6 +50,7 @@
|
|
|
49
50
|
],
|
|
50
51
|
"workspaces": [
|
|
51
52
|
"rigs/*",
|
|
52
|
-
"rigs_dev/*"
|
|
53
|
+
"rigs_dev/*",
|
|
54
|
+
"rig_dev/*"
|
|
53
55
|
]
|
|
54
|
-
}
|
|
56
|
+
}
|
package/demo/package.rig.json5
CHANGED
|
@@ -1,12 +1,66 @@
|
|
|
1
|
-
|
|
2
|
-
{
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
{
|
|
2
|
+
dependencies: {
|
|
3
|
+
'rig-test-1': {
|
|
4
|
+
dev: true,
|
|
5
|
+
name: 'rig-test-1',
|
|
6
|
+
source: 'git@github.com:FlashHand/rig-test-1.git',
|
|
7
|
+
version: '1.0.1',
|
|
8
|
+
},
|
|
9
|
+
'rig-test-2': {
|
|
10
|
+
dev: false,
|
|
11
|
+
name: 'rig-test-2',
|
|
12
|
+
source: 'git@github.com:FlashHand/rig-test-2.git',
|
|
13
|
+
version: '1.0.2',
|
|
14
|
+
},
|
|
6
15
|
},
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
16
|
+
isLegacy: false,
|
|
17
|
+
cicd: {
|
|
18
|
+
path_schema: "demo/{env}/{oem}",
|
|
19
|
+
//Your local build's path.
|
|
20
|
+
source: {
|
|
21
|
+
root_path: "dist"
|
|
22
|
+
},
|
|
23
|
+
//Entry path for your website's index.html.Default is '/'.
|
|
24
|
+
web_entry_path: '/',
|
|
25
|
+
//Your deploy target
|
|
26
|
+
target: {
|
|
27
|
+
//Only support alicould for now.
|
|
28
|
+
id: "alicloud",
|
|
29
|
+
type: "alicloud",
|
|
30
|
+
bucket: "rys-deploy",
|
|
31
|
+
region: "oss-cn-hangzhou",
|
|
32
|
+
access_key: "${ak}",
|
|
33
|
+
access_secret: "${as}",
|
|
34
|
+
//Root path in the bucket,default is '/'.
|
|
35
|
+
root_path: "/",
|
|
36
|
+
},
|
|
37
|
+
endpoints: {
|
|
38
|
+
"demo/test/oem1": {
|
|
39
|
+
build: 'yarn cross-env OUTPUT_DIR=__RIG_OUTPUT_DIR__ PUBLIC_PATH=__RIG_PUBLIC_PATH__ vue-cli-service build',
|
|
40
|
+
defines: {
|
|
41
|
+
RIG_REPLACE_GRAY: '/test-gray'
|
|
42
|
+
},
|
|
43
|
+
domains: [
|
|
44
|
+
"test-mp.rys.cn"
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
groups: [
|
|
49
|
+
{
|
|
50
|
+
name: "%oem",
|
|
51
|
+
level: "oem",
|
|
52
|
+
includes: [
|
|
53
|
+
"oem1",
|
|
54
|
+
"oem2"
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
]
|
|
58
|
+
|
|
11
59
|
},
|
|
12
|
-
|
|
60
|
+
share: {
|
|
61
|
+
eslint: {
|
|
62
|
+
links: ['https://gist.githubusercontent.com/FlashHand/580a0a2f13b5ec31ccbedd368abd3bbf/raw/0638841f4f0c284d442a7ffe7bc9c8f3f2feb91e/.eslintrc.js'],
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
File without changes
|
package/demo/rig_helper.js
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
const json5 = require('json5');
|
|
2
2
|
const fs = require('fs');
|
|
3
|
-
const
|
|
4
|
-
let
|
|
5
|
-
|
|
6
|
-
return item.name;
|
|
7
|
-
});
|
|
8
|
-
console.log(flatPkgArr);
|
|
9
|
-
return flatPkgArr;
|
|
3
|
+
const getRigDeps = () => {
|
|
4
|
+
let rigConfig = json5.parse(fs.readFileSync('./package.rig.json5'));
|
|
5
|
+
return Object.keys(rigConfig.dependencies);
|
|
10
6
|
}
|
|
11
|
-
|
|
12
7
|
module.exports = {
|
|
13
|
-
getPkgs
|
|
8
|
+
getPkgs: getRigDeps,
|
|
9
|
+
getRigDeps
|
|
14
10
|
}
|
package/demo/vue.config.js
CHANGED
package/demo/yarn.lock
CHANGED
|
@@ -2345,6 +2345,13 @@ cosmiconfig@^7.0.0:
|
|
|
2345
2345
|
path-type "^4.0.0"
|
|
2346
2346
|
yaml "^1.10.0"
|
|
2347
2347
|
|
|
2348
|
+
cross-env@^7.0.3:
|
|
2349
|
+
version "7.0.3"
|
|
2350
|
+
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
|
|
2351
|
+
integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
|
|
2352
|
+
dependencies:
|
|
2353
|
+
cross-spawn "^7.0.1"
|
|
2354
|
+
|
|
2348
2355
|
cross-spawn@^5.0.1:
|
|
2349
2356
|
version "5.1.0"
|
|
2350
2357
|
resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
|
|
@@ -2365,7 +2372,7 @@ cross-spawn@^6.0.0:
|
|
|
2365
2372
|
shebang-command "^1.2.0"
|
|
2366
2373
|
which "^1.2.9"
|
|
2367
2374
|
|
|
2368
|
-
cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
|
2375
|
+
cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
|
2369
2376
|
version "7.0.3"
|
|
2370
2377
|
resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
|
2371
2378
|
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
|
|
@@ -3797,12 +3804,10 @@ json-stable-stringify-without-jsonify@^1.0.1:
|
|
|
3797
3804
|
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
|
3798
3805
|
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
|
|
3799
3806
|
|
|
3800
|
-
json5@2.1
|
|
3801
|
-
version "2.1
|
|
3802
|
-
resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.
|
|
3803
|
-
integrity sha512-
|
|
3804
|
-
dependencies:
|
|
3805
|
-
minimist "^1.2.5"
|
|
3807
|
+
json5@2.2.1:
|
|
3808
|
+
version "2.2.1"
|
|
3809
|
+
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
|
|
3810
|
+
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
|
|
3806
3811
|
|
|
3807
3812
|
json5@^1.0.1:
|
|
3808
3813
|
version "1.0.1"
|
|
@@ -5070,6 +5075,14 @@ reusify@^1.0.4:
|
|
|
5070
5075
|
resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
|
|
5071
5076
|
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
|
|
5072
5077
|
|
|
5078
|
+
"rig-test-1@git+ssh://git@github.com:FlashHand/rig-test-1.git#1.0.1":
|
|
5079
|
+
version "1.0.1"
|
|
5080
|
+
resolved "git+ssh://git@github.com:FlashHand/rig-test-1.git#9a86b587aa9bea6c176ab8a470c8a86e7a2bf655"
|
|
5081
|
+
|
|
5082
|
+
"rig-test-2@git+ssh://git@github.com:FlashHand/rig-test-2.git#1.0.2":
|
|
5083
|
+
version "1.0.2"
|
|
5084
|
+
resolved "git+ssh://git@github.com:FlashHand/rig-test-2.git#3c158c6c86276e8b3b5e5c341c01f4f4d9ea6094"
|
|
5085
|
+
|
|
5073
5086
|
rimraf@^3.0.2:
|
|
5074
5087
|
version "3.0.2"
|
|
5075
5088
|
resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
|
package/doc/cicd_cn.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# cicd
|
|
2
|
+
### example:
|
|
3
|
+
```json5
|
|
4
|
+
{
|
|
5
|
+
cicd: {
|
|
6
|
+
path_schema: "demo/{env}/{oem}",
|
|
7
|
+
source: {
|
|
8
|
+
root_path: "dist",
|
|
9
|
+
},
|
|
10
|
+
web_entry_path: '/',
|
|
11
|
+
target: {
|
|
12
|
+
id: "alicloud",
|
|
13
|
+
type: "alicloud",
|
|
14
|
+
bucket: "deploy",
|
|
15
|
+
region: "oss-somewhere",
|
|
16
|
+
access_key: "${ak}",
|
|
17
|
+
access_secret: "${as}",
|
|
18
|
+
root_path: "/",
|
|
19
|
+
},
|
|
20
|
+
endpoints: {
|
|
21
|
+
"demo/test/oem1": {
|
|
22
|
+
build: 'yarn cross-env OUTPUT_DIR=__RIG_OUTPUT_DIR__ PUBLIC_PATH=__RIG_PUBLIC_PATH__ vue-cli-service build',
|
|
23
|
+
defines: {
|
|
24
|
+
RIG_REPLACE_GRAY: '/test-gray'
|
|
25
|
+
},
|
|
26
|
+
domains: [
|
|
27
|
+
"oem1.domain.com"
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
"demo/test/oem2": {
|
|
31
|
+
build: 'yarn cross-env OUTPUT_DIR=__RIG_OUTPUT_DIR__ PUBLIC_PATH=__RIG_PUBLIC_PATH__ vue-cli-service build',
|
|
32
|
+
defines: {
|
|
33
|
+
RIG_REPLACE_GRAY: '/test-gray'
|
|
34
|
+
},
|
|
35
|
+
domains: [
|
|
36
|
+
"oem2.domain.com"
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
groups: [
|
|
41
|
+
{
|
|
42
|
+
name: "%group1",
|
|
43
|
+
level: "oem",
|
|
44
|
+
includes: [
|
|
45
|
+
"oem1",
|
|
46
|
+
"oem2"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|字段|说明|默认值|备注|
|
|
54
|
+
|:---|:---|:---|:---|
|
|
55
|
+
|path_schema|打包文件目录在source.root_path下前缀||
|
|
56
|
+
|source.root_path|打包文件所在目录|dist|
|
|
57
|
+
|web_entry_path|网站访问的根目录|/|有的网页首页不是用/直接访问,而是例如:https://domain.com/path_to_index|
|
|
58
|
+
|
|
59
|
+
|target字段|说明|默认值|备注|
|
|
60
|
+
|:---|:---|:---|:---|
|
|
61
|
+
|id|目前暂无作用,部署目标的id,为多目标部署设计而预留|||
|
|
62
|
+
|type|目前死为alicloud,部署目标的类型|alicloud||
|
|
63
|
+
|bucket|ali-oss的bucket|
|
|
64
|
+
|region|bucket的region|
|
|
65
|
+
|access_key|oss访问授权| |${}的作用是该位置参数可以通过命令行配置,可以方式密钥暴露|
|
|
66
|
+
|access_secret|oss访问授权| ||
|
|
67
|
+
|root_path|bucket存放网站的根目录|/| |
|
|
68
|
+
|
|
69
|
+
|endpoint字段|说明|默认值|备注|
|
|
70
|
+
|:---|:---|:---|:---|
|
|
71
|
+
|key|实际的路径前缀,必须符合path_schema|||
|
|
72
|
+
|type|部署目标的类型,目前写死为alicloud|alicloud||
|
|
73
|
+
|build|build脚本,必须将文件||需要将文件打包到__RIG_OUTPUT_DIR__下|
|
|
74
|
+
|defines|预定义可替换字段||rig build完成后,会对所有的文本进行字段替换|
|
|
75
|
+
|domains|需要部署的cdn域名||rig publish 会通过uri rewrite指向对应资源目录|
|
|
76
|
+
|
|
77
|
+
#### path_schema
|
|
78
|
+
rigjs 采用文件目录管理CICD.
|
|
79
|
+
|
|
80
|
+
path_schema是文件打包目录前缀;
|
|
81
|
+
|
|
82
|
+
在执行rig build|deploy|publish时,传入的路径的开头都必须符合path_schema.
|
|
83
|
+
|
|
84
|
+
{}的作用是可变目录,在执行build|deploy|publish命令时可以指定该位置的目录名。
|
|
85
|
+
可变目录使用比较灵活。
|
|
86
|
+
|
|
87
|
+
#### rig build
|
|
88
|
+
**example-1**
|
|
89
|
+
通过-s 传入querystring,指定各位置的目录。
|
|
90
|
+
```shell
|
|
91
|
+
rig build demo/{env}/{oem}/1.1 -s env=test&oem=oem1
|
|
92
|
+
#等价于
|
|
93
|
+
rig build demo/test/oem1/1.0.0.0
|
|
94
|
+
```
|
|
95
|
+
**example-2**
|
|
96
|
+
利用%通配符,同时打包到多个目录下
|
|
97
|
+
```shell
|
|
98
|
+
rig build demo/{env}/%/1.1 -s env=test
|
|
99
|
+
#等价于
|
|
100
|
+
rig build demo/test/oem1/1.0.0.0 && rig build demo/test/oem2/1.0.0.0
|
|
101
|
+
```
|
|
102
|
+
**注意:demo必须得写死,只有用{}包起来才是名称可变目录**
|
|
103
|
+
|
|
104
|
+
#### rig deploy
|
|
105
|
+
将代码发布到阿里云OSS中。
|
|
106
|
+
```shell
|
|
107
|
+
rig deploy demo/test/oem1/1.0.0.0 -p 'ak=your_access_token&as=your_access_secret'
|
|
108
|
+
#-p的作用是用来替换${}参数。
|
|
109
|
+
```
|
|
110
|
+
#### rig publish
|
|
111
|
+
将cdn回源到该目录下的网站,并刷新预热,完成后网页才算发布成功。
|
|
112
|
+
```shell
|
|
113
|
+
rig publish demo/test/oem1/1.0.0.0 -p 'ak=your_access_token&as=your_access_secret'
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
你可以在github或gitlab的cicd脚本中灵活使用build|deploy|publish命令,
|
|
117
|
+
将不同环境或不同定制版的包打到不同目录下。
|
|
118
|
+
另外path_schema可以帮助开发防止打包目录混乱的情况。
|
|
119
|
+
|
|
120
|
+
|
package/doc/cmd_cn.md
ADDED
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# dependencies
|
|
2
|
+
|
|
3
|
+
```json5
|
|
4
|
+
/*
|
|
5
|
+
dev:
|
|
6
|
+
dev默认为false,为true时,执行yarn install,代码库会被clone
|
|
7
|
+
source:
|
|
8
|
+
source是代码库的地址,目前只支持git ssh地址,暂时不支持http地址。
|
|
9
|
+
version:
|
|
10
|
+
dev为false时生效,version指定tag的代码库的版本下载到node_modules中.
|
|
11
|
+
version支持semver格式,
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
{
|
|
15
|
+
dependencies: {
|
|
16
|
+
'rig-test-1': {
|
|
17
|
+
dev: true,
|
|
18
|
+
source: 'git@github.com:FlashHand/rig-test-1.git',
|
|
19
|
+
version: '1.0.1',
|
|
20
|
+
},
|
|
21
|
+
'rig-test-2': {
|
|
22
|
+
dev: false,
|
|
23
|
+
source: 'git@github.com:FlashHand/rig-test-2.git',
|
|
24
|
+
version: '1.0.2',
|
|
25
|
+
},
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
package/doc/share_cn.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
dependencies: {
|
|
3
|
+
'rig-test-1': {
|
|
4
|
+
dev: true,
|
|
5
|
+
name: 'rig-test-1',
|
|
6
|
+
source: 'git@github.com:FlashHand/rig-test-1.git',
|
|
7
|
+
},
|
|
8
|
+
'rig-test-2': {
|
|
9
|
+
dev: true,
|
|
10
|
+
name: 'rig-test-2',
|
|
11
|
+
source: 'git@github.com:FlashHand/rig-test-2.git',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
}
|
package/jest.config.ts
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
const config = {
|
|
2
2
|
verbose: false,
|
|
3
3
|
collectCoverage: true,
|
|
4
|
-
|
|
4
|
+
preset: 'ts-jest',
|
|
5
|
+
testMatch: [
|
|
6
|
+
"**/?(*.)+(spec|test).+(ts|tsx|js)",
|
|
7
|
+
],
|
|
8
|
+
transform: {
|
|
9
|
+
"^.+\\.(ts|tsx)$": "ts-jest",
|
|
10
|
+
},
|
|
11
|
+
moduleNameMapper: {
|
|
12
|
+
'^@/(.*)$':'<rootDir>/lib/$1',
|
|
13
|
+
},
|
|
5
14
|
};
|
|
6
15
|
|
|
7
16
|
module.exports = config;
|
package/lib/add/index.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import regexHelper from '../utils/regexHelper';
|
|
2
|
+
import {Dep} from '@/classes/dependencies/Dep';
|
|
3
|
+
import RigConfig from '@/classes/RigConfig';
|
|
4
|
+
import install from '../install';
|
|
5
|
+
import print from '../print';
|
|
6
|
+
import semver from 'semver/preload';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @desc add
|
|
10
|
+
* 安装rig库
|
|
11
|
+
* @returns {Promise<void>}
|
|
12
|
+
*/
|
|
13
|
+
export default async (cmd: any) => {
|
|
14
|
+
try {
|
|
15
|
+
print.info(`rig add`);
|
|
16
|
+
const rigConfig = RigConfig.createFromCWD();
|
|
17
|
+
if (rigConfig.isLegacy) throw new Error(`rig dev' does not support legacy config template`);
|
|
18
|
+
const cmdArgs = cmd.args;
|
|
19
|
+
//检查第一个参数是否是git url,第二个参数是否是版本号
|
|
20
|
+
if (regexHelper.gitURL.test(cmdArgs[0]) && semver.valid(cmdArgs[1])) {
|
|
21
|
+
//传入git url,模式2处理
|
|
22
|
+
const source = cmdArgs[0];
|
|
23
|
+
const gitName = source.match(regexHelper.matchGitName)[2];
|
|
24
|
+
print.info(`add ${gitName}(${source}) to dev`);
|
|
25
|
+
const dep = new Dep({name: gitName, source, dev: false, version: cmdArgs[1]});
|
|
26
|
+
rigConfig.findOrUpsertDep(gitName, dep);
|
|
27
|
+
} else {
|
|
28
|
+
throw new Error(`arg[0] needs to be git url;arg[1] needs to be semver`);
|
|
29
|
+
}
|
|
30
|
+
console.log('do overwritting');
|
|
31
|
+
rigConfig.overwrite();
|
|
32
|
+
console.log('do installing');
|
|
33
|
+
await install()
|
|
34
|
+
} catch (e) {
|
|
35
|
+
throw new Error(`rig add failed:${e.message}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
package/lib/build/index.ts
CHANGED
|
@@ -4,7 +4,8 @@ import shell from 'shelljs';
|
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import fs from 'fs';
|
|
6
6
|
import vueEnv from '../vue-env';
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
import print from '../print';
|
|
8
9
|
|
|
9
10
|
const replaceDefine = (target: string, defines?: Define) => {
|
|
10
11
|
console.log(`start replaceDefine:${target}`);
|
|
@@ -30,68 +31,72 @@ const replaceDefine = (target: string, defines?: Define) => {
|
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
export default async (cmd: any) => {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const regexDomain = new RegExp('__DOMAIN__', 'g');
|
|
34
|
+
console.log('start building');
|
|
35
|
+
//create cicd object
|
|
36
|
+
const cicd = CICD.createByDefault(cmd);
|
|
37
|
+
//construct cmd object
|
|
38
|
+
const cicdCmd = new CICDCmd(cmd, cicd);
|
|
39
|
+
//build by cicdCmd and cicdConfig
|
|
40
|
+
if (cicdCmd.endpoints.length === 0) {
|
|
41
|
+
throw new Error('Must have validate endpoints')
|
|
42
|
+
}
|
|
43
|
+
//替换build中的可替换变量
|
|
44
|
+
const regexPublicPath = new RegExp('\\$public_path', 'g');
|
|
45
|
+
const regexPublicPath2 = new RegExp('__PUBLIC_PATH__', 'g');
|
|
46
|
+
const regexPublicPath3 = new RegExp('__RIG_PUBLIC_PATH__', 'g');
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
frameworktype = FrameworkType.vue;
|
|
48
|
+
const regexDomain = new RegExp('__DOMAIN__', 'g');
|
|
49
|
+
const regexDomain2 = new RegExp('__RIG_DOMAIN__', 'g');
|
|
50
|
+
const regexOutput = new RegExp('__RIG_OUTPUT_DIR__', 'g');
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
for (let i = 0; i < cicdCmd.endpoints.length; i++) {
|
|
54
|
+
const ep = cicdCmd.endpoints[i];
|
|
55
|
+
try {
|
|
56
|
+
//替换define中的$public_path
|
|
57
|
+
if (ep.defines) {
|
|
58
|
+
Object.keys(ep.defines).forEach(key => {
|
|
59
|
+
ep.defines[key] = ep.defines[key].replace(regexPublicPath, ep.publicPath);
|
|
60
|
+
ep.defines[key] = ep.defines[key].replace(regexPublicPath2, ep.publicPath);
|
|
61
|
+
ep.defines[key] = ep.defines[key].replace(regexPublicPath3, ep.publicPath);
|
|
62
|
+
ep.defines[key] = ep.defines[key].replace(regexDomain, ep.domains[0]);
|
|
63
|
+
ep.defines[key] = ep.defines[key].replace(regexDomain2, ep.domains[0]);
|
|
64
|
+
});
|
|
66
65
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
} catch (e) {
|
|
67
|
+
console.log('JSON5 error:', ep.defines, e.message);
|
|
68
|
+
}
|
|
69
|
+
let frameworktype: FrameworkType | undefined;
|
|
70
|
+
//判断是否要生成环境变量文件,以及生成环境变量的操作
|
|
71
|
+
if (ep.vue_env) {
|
|
72
|
+
frameworktype = FrameworkType.vue;
|
|
73
|
+
}
|
|
74
|
+
if (!ep.extra_env) ep.extra_env = {};
|
|
75
|
+
ep.extra_env['PUBLIC_PATH'] = ep.publicPath;
|
|
76
|
+
ep.extra_env['OUTPUT_DIR'] = path.join(cicd.source.root_path, ep.publicPath);
|
|
70
77
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
break;
|
|
78
|
-
default:
|
|
79
|
-
break;
|
|
78
|
+
switch (frameworktype) {
|
|
79
|
+
case FrameworkType.vue: {
|
|
80
|
+
vueEnv.useEnv(ep.vue_env!, ep.extra_env);
|
|
81
|
+
//推测vue脚本
|
|
82
|
+
if (!ep.build) ep.build = `npx vue-cli-service build --mode rig --dest ${ep.extra_env['OUTPUT_DIR']}`;
|
|
80
83
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
//setup default defines and replace text in built source.
|
|
85
|
-
if (!ep.defines) ep.defines = {};
|
|
86
|
-
ep.defines['__PUBLIC_PATH__'] = ep.publicPath;
|
|
87
|
-
ep.defines['__DEPLOY_DIR__'] = ep.publicPath;
|
|
88
|
-
ep.defines['__RIG_PUBLIC_PATH__'] = ep.publicPath;
|
|
89
|
-
ep.defines['__RIG_DEPLOY_DIR__'] = ep.publicPath;
|
|
90
|
-
ep.defines['__RIG_ENTRY_PATH__'] = ep.web_entry_path!;
|
|
91
|
-
replaceDefine(path.join(cicd.source.root_path, ep.publicPath), ep.defines);
|
|
84
|
+
break;
|
|
85
|
+
default:
|
|
86
|
+
break;
|
|
92
87
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
88
|
+
//Replace predefined variables in build script
|
|
89
|
+
ep.build = ep.build.replace(regexPublicPath, ep.publicPath);
|
|
90
|
+
ep.build = ep.build.replace(regexOutput, path.join(cicd.source.root_path, ep.publicPath));
|
|
91
|
+
print.info(`using build script:${ep.build}`);
|
|
92
|
+
shell.exec(ep.build);
|
|
93
|
+
//setup default defines and replace text in built source.
|
|
94
|
+
if (!ep.defines) ep.defines = {};
|
|
95
|
+
ep.defines['__PUBLIC_PATH__'] = ep.publicPath;
|
|
96
|
+
ep.defines['__DEPLOY_DIR__'] = ep.publicPath;
|
|
97
|
+
ep.defines['__RIG_PUBLIC_PATH__'] = ep.publicPath;
|
|
98
|
+
ep.defines['__RIG_DEPLOY_DIR__'] = ep.publicPath;
|
|
99
|
+
ep.defines['__RIG_ENTRY_PATH__'] = ep.web_entry_path!;
|
|
100
|
+
replaceDefine(path.join(cicd.source.root_path, ep.publicPath), ep.defines);
|
|
96
101
|
}
|
|
97
102
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
|
|
3
|
+
const testPath = path.join(__dirname, '../../jest/test.rig.json5');
|
|
4
|
+
import RigConfig from '@/classes/RigConfig';
|
|
5
|
+
|
|
6
|
+
test('RigConfig init dependencies', () => {
|
|
7
|
+
const testConfig = RigConfig.createFromPath(testPath);
|
|
8
|
+
expect(testConfig.dependencies).toEqual({
|
|
9
|
+
'rig-test-1': {
|
|
10
|
+
source: "git@github.com:FlashHand/rig-test-1.git",
|
|
11
|
+
version: "1.0.1"
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
});
|