bdp项目jks构建优化
# Jks脚本拉取优化
# Git 方式修改
# Git clone
通过--depth 1
控制最新一次记录就可以;
git clone --depth 1 -b master http://username:pwd@10.20.1.xx/datastudio/bdp-test.git /Users/samy/Documents/work/code/zsmart/env-react/.gittmp/portal
1
# Git pull
有了第一次的clone后,下次再构建的话,不用移除之前的老项目,直接运行git pull
拉取最新代码,再构建即可;
const actionName = pull ? '拉取' : '克隆';
let cmdStr = `git clone --depth 1 -b ${configBranch} ${url} ${repoTempPath}`;
if (pull) {
cmdStr = `cd ${repoTempPath} && git pull`;
}
const tempPath = join(process.cwd(), GITTEMP);// 使用拉取模式,不删除
if (!pull) {
console.warn('先清理.gittmp');
removeSync(tempPath);
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 子模块单独处理
判断是否是单独模块构建,或者远程模式加载;
if (module) {
// 如果采用远程加载的方式,那么独立打包
cloneRemoteModule(opts, module, remoteRepos, branchMap);
return;
}
// 1. 先克隆门户代码
gitClone({
...opts,
branchMap,
remoteRepoOpts: {
name: 'portal',
repoUrl: portalRepoUrl,
},
callback: () => {
// 2. 再克隆其他子模块
remoteRepos.forEach((remoteRepoOpts) => {
const { name } = remoteRepoOpts;
// 如果采用远程加载的方式,那么忽略
if (`|${remoteModules}|`.indexOf(name) !== -1) {
console.log(`${name}采用远程加载的方式,忽略`);
return;
}
gitClone({
...opts,
branchMap,
remoteRepoOpts,
});
});
},
});
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
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
# npm源处理
# taobao源
npm install --registry=https://registry.npm.taobao.org/
1
# yarn源【推荐】
yarn有全局缓存功能;保证库版本依赖不变情况下,切换成yarn安装依赖;目前项目涉及到多个线上版本,不敢贸然修改版本,还是用接着用npm统一处理;
yarn global add yrm
yrm ls #选择taobao源
yarn install
1
2
3
2
3
# webpack层面优化[要点]
- 详见【vue-config详解及实践】
- 详见【umi项目本地构建优化】
# 第三方库依赖缓存优化
第三方依赖第一次安装成功后,缓存起来;
jks构建脚本设置:
cd $WORKSPACE
envName=autorun # develop/release
moduleName=realtime #子模块名
modulePName=bdp-cloud-react #门户模块名
isNpmT=true # 是否使用npm淘宝源
isCacheDep=true # 是否缓存node_modules依赖包数据
isPull=false # 是否git pull模式;加快构建速度:目前要第一次成功后,才能用pull;如果对应的env中模块的版本修改后请下要改回false;
curDir=$WORKSPACE
bakDir=$curDir/node_modules_bak
bakPDir=$bakDir/$modulePName
bakMDir=$bakDir/$moduleName
bakPDirisEmpty=true
bakMDirisEmpty=true
npmSource=http://npm.iwxxx.com:8081/repository/npm-all/
if [ $isNpmT == true ]; then
npmSource=https://registry.npm.taobao.org/
fi
function checkFileEmpty() {
isEmptyFile=true
file=$1
if [ -e $file ]; then
if [ "$(ls -A ${file})" != "" ]; then
isEmptyFile=false
fi
else
mkdir -p $file
fi
echo $isEmptyFile
}
rm -rf dist dist.zip
cd ./node
npm install --registry=$npmSource
npm run git addUser 0027013011 M2ZiYjYxNzFhNzU3YTEzOGE4N2Q0MTQwZjNhMWIzZDM=
if [ $isPull != true ]; then
npm run clone env=$envName module=$moduleName
else
npm run clone env=$envName module=$moduleName pull=true
fi
if [ $isPull == true ]; then
cd ../.gittmp/$moduleName
npm run build env=$envName
else
if [ $isCacheDep == true ]; then
bakPDirisEmpty=$(checkFileEmpty $bakPDir)
bakMDirisEmpty=$(checkFileEmpty $bakMDir)
fi
cd ../.gittmp/$modulePName
if [ $isCacheDep == true -a $bakPDirisEmpty == false ]; then
rm -rf node_modules && mkdir node_modules && mv -v $bakPDir/{.[!.],}* ./node_modules
fi
npm install --registry=$npmSource
cd ../$moduleName
if [ $isCacheDep == true -a $bakMDirisEmpty == false ]; then
rm -rf node_modules && mkdir node_modules && mv -v $bakMDir/{.[!.],}* ./node_modules
fi
npm install --registry=$npmSource
npm run build env=$envName
if [ $isCacheDep == true ]; then
rm -rf $bakDir && mkdir -p $bakPDir $bakMDir
mv -vf ../$modulePName/node_modules/{.[!.],}* $bakPDir
mv -vf ./node_modules/{.[!.],}* $bakMDir
fi
fi
zip -r dist.zip dist
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
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
本地调试脚本:buildJks.sh
#!/bin/bash
###
# @Author: samy
# @email: yessz#foxmail.com
# @time: 2020-08-03 10:16:09
# @modAuthor: samy
# @modTime: 2022-01-06 20:56:55
# @desc: 构建脚本: 用于本地调试构建使用
# Copyright © 2015~2021 BDP FE
###
# cd $WORKSPACE
isNpmT=true # 是否使用npm淘宝源
envName=autorun # develop/release
moduleName=realtime #子模块名
isPull=false # 是否git pull模式;加快构建速度:目前要第一次成功后,才能用pull;如果对应的env中模块的版本修改后请下要改回false;
isCacheDep=true # 是否缓存node_modules依赖包数据
modulePName=bdp-cloud-react #门户模块名
# curDir=$WORKSPACE
curDir=$(
cd "$(dirname "$0")"
pwd
)
bakDir=$curDir/node_modules_bak
bakPDir=$bakDir/$modulePName
bakMDir=$bakDir/$moduleName
bakPDirisEmpty=true
bakMDirisEmpty=true
npmSource=http://npm.iwxxx.com:8081/repository/npm-all/
if [ $isNpmT == true ]; then
npmSource=https://registry.npm.taobao.org/
fi
function checkFileEmpty() {
isEmptyFile=true
file=$1
if [ -e $file ]; then
if [ "$(ls -A ${file})" != "" ]; then
isEmptyFile=false
fi
else
mkdir -p $file
fi
echo $isEmptyFile
}
rm -rf dist dist.zip
cd ./node
npm install --registry=$npmSource
npm run git addUser 0027013011 M2ZiYjYxNzFhNzU3YTEzOGE4N2Q0MTQwZjNhMWIzZDM=
if [ $isPull == true ]; then
npm run clone env=${envName} module=${moduleName} pull=true
else
npm run clone env=${envName} module=${moduleName}
fi
if [ $isPull != true ]; then
bakPDirisEmpty=$(checkFileEmpty $bakPDir)
bakMDirisEmpty=$(checkFileEmpty $bakMDir)
echo "======$bakPDirisEmpty======"
echo "======$bakMDirisEmpty======"
cd ../.gittmp/$modulePName
if [ $bakPDirisEmpty == false ]; then
echo "=======$modulePName 拷贝之前缓存node_modules依赖包数据======="
rm -rf node_modules && mkdir node_modules && mv -f $bakPDir/{.[!.],}* ./node_modules #利用之前的依赖包,提高速度;
fi
echo "=======$modulePName installing 依赖安装中======="
npm install --registry=$npmSource
echo "=======$modulePName installed 依赖安装成功======="
cd ../$moduleName
if [ $bakMDirisEmpty == false ]; then
echo "=======$moduleName 拷贝之前缓存node_modules依赖包数据======="
rm -rf node_modules && mkdir node_modules && mv -f $bakMDir/{.[!.],}* ./node_modules #利用之前的依赖包,提高速度;
fi
echo "=======$moduleName installing 依赖安装中======="
npm install --registry=$npmSource
echo "=======$moduleName installed 依赖安装成功======="
npm run build env=$envName
echo "=======$modulePName 缓存node_modules依赖包数据======="
mv -f ../$modulePName/node_modules/{.[!.],}* $bakPDir
echo "=======$moduleName 缓存node_modules依赖包数据======="
mv -f ./node_modules/{.[!.],}* $bakMDir
else
npm run build env=$envName
fi
zip -r dist.zip dist
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
90
91
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
90
91
# 实践
# bdp项目
# 实践步骤
默认原始第一次构建;没有目前bop-schedule项目总体构建速度是15min;
npm run clone env=develop module=schedule # npm run clone env=develop module=schedule pull=true cd ../.gittmp/schedule npm install --registry=https://registry.npm.taobao.org/ npm run build env=develop zip -r dist.zip dist
1
2
3
4
5
6
7Git 换成pull方式及npm install 步骤省略后;后面只做构建处理;构建build的用时2min半; 大概可提速6倍;
# npm run clone env=develop module=schedule npm run clone env=develop module=schedule pull=true cd ../.gittmp/schedule #npm install --registry=https://registry.npm.taobao.org/ npm run build env=develop zip -r dist.zip dist
1
2
3
4
5
6
7
# 总结【要点】
发现主要是git clone
,和 npm install
及npm run build
三大部分很耗时间;
上次更新: 2023/11/17, 05:08:20