问题描述
我使用外壳程序脚本来构建多个TypeScript项目。要构建一个项目,我需要为每个项目执行两个命令:“ yarn(安装)”和“ yarn build”。现在,我想优化管道,因为要花很长时间才能按顺序完成所有操作,尤其是在将要使用它的GitLab服务器上。
我试图并行运行所有程序,但这没有用,因为同时运行多个“纱线安装”时,模块将无法安装。因此,我依次运行安装程序,然后并行构建所有模块。
这有效,但我希望通过在模块完成依赖项安装后直接运行模块的构建来对其进行改进。例如:
- 开始为模块x安装依赖项
- 在“相同”时间:
- 构建模块x
- 开始为模块y安装依赖项
依此类推...
我试图做到这一点,但在某种程度上成功了:模块全部被构建,但是脚本在所有模块都被构建之前结束(它不等待最后一个模块完成构建)。这是代码:
#!/bin/bash
SCRIPTDIR="$(dirname "$0")"
# Finding all modules
modules=$(find $SCRIPTDIR \
-not \( -path '*/node_modules/*' -prune \) \
-not \( -path './__template' -prune \) \
-name package.json
);
install_dependencies() {
local module=$1
local path="${module%/*}";
local name="${path#*/}";
printf "\nInstalling dependencies for \"\e[1m$name\e[0m\"\n";
yarn --cwd $path || { printf "\n\e[31mYarn \"install\" Failed: Installing dependencies for module \"\e[1m$name\e[8m\" Failed\e[0m\n" ; exit 1; };
}
build_module() {
local module=$1
local path="${module%/*}";
local name="${path#*/}";
printf "\nBuild module \"\e[1m$name\e[0m\"\n"
yarn --cwd $path build || { printf "\n\e[31mYarn \"build\" Failed: Building module \"\e[1m$name\e[8m\" Failed\e[0m\n" ; exit 1; };
}
# Execute for each module
for module in $modules
do (
install_dependencies $module && (build_module $module &)
)
done;
wait;
您知道如何等待所有模块构建吗?
如果有人知道为什么模块的依赖安装不能并行运行,我也希望知道。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)