Skip to content

Instantly share code, notes, and snippets.

@skys215
Created July 23, 2021 15:01
Show Gist options
  • Save skys215/c5c3b50cabeee22871dc751a2dab0899 to your computer and use it in GitHub Desktop.
Save skys215/c5c3b50cabeee22871dc751a2dab0899 to your computer and use it in GitHub Desktop.
A shell script to quickly change npm/composer mirror
#!/bin/bash
# Variable
# Template #
# Always end with a space
# COMMAND_COMPOSER_GLOBAL="composer config -g repos.packagist composer "
# Always end with a space
# COMMAND_COMPOSER_LOCAL="composer config repo.packagist composer "
# The command to reset to default repository globally
# COMMAND_COMPOSER_RESET_GLOBAL="composer config -g --unset repos.packagist"
# The command to reset to default repository locally
# COMMAND_COMPOSER_RESET_LOCAL="composer config --unset repos.packagist"
# The Original mirrors which the client has
# COMMAND_NPM_ORIGINAL=""
# Mirror names, replace DUMMY with package manager name
# DUMMY_MIRROR_NAMES=()
# Mirror lists, replace DUMMY with package manager name
# The order of mirror URL must match with the mirror name
# DUMMY_MIRRORS=()
# NPM
COMMAND_NPM_GLOBAL="npm config set registry "
COMMAND_NPM_LOCAL="npm config set registry "
COMMAND_NPM_RESET_GLOBAL="npm config set registry https://www.npmjs.org"
COMMAND_NPM_RESET_LOCAL="npm config set registry https://www.npmjs.org"
COMMAND_NPM_GET_GLOBAL="npm config get --global registry"
COMMAND_NPM_GET_LOCAL="npm config get registry"
COMMAND_NPM_ORIGINAL=""
# NPM mirror names
NPM_MIRROR_NAMES=(
"taobao"
"zju"
"huawei"
)
# NPM mirror names
# NPM mirrors
NPM_MIRRORS=(
"https://registry.npm.taobao.org"
"http://mirrors.zju.edu.cn/npm"
"https://mirrors.huaweicloud.com/repository/npm/"
)
# COMPOSER
COMMAND_COMPOSER_GLOBAL="composer config -g repos.packagist composer "
COMMAND_COMPOSER_LOCAL="composer config repo.packagist composer "
COMMAND_COMPOSER_RESET_GLOBAL="composer config -g --unset repos.packagist"
COMMAND_COMPOSER_RESET_LOCAL="composer config --unset repos.packagist"
COMMAND_COMPOSER_GET_GLOBAL="composer config -g --get repos.packagist"
COMMAND_COMPOSER_GET_LOCAL="composer config --get repos.packagist"
COMMAND_COMPOSER_ORIGINAL=""
COMPOSER_MIRROR_NAMES=(
"cnpkg"
"lvchn"
"phpcomposer"
"aliyun"
"huawei"
)
COMPOSER_MIRRORS=(
"https://php.cnpkg.org"
"https://packagist.laravel-china.org"
"https://packagist.phpcomposer.com"
"https://mirrors.aliyun.com/composer"
"https://mirrors.huaweicloud.com/repository/php"
)
PACKAGE_NAME=""
MIRROR_NAME="fastest"
SCOPE_NAME="LOCAL"
SHOW_HELP () {
echo "Usage: swap npm|composer|help mirror_name|reset [--global|--local]"
}
NPM () {
INDEX=0
COMMAND=""
case $2 in
"GLOBAL")
COMMAND="COMMAND_NPM_GLOBAL"
;;
"LOCAL")
if [ ! -e "package.json" ]; then
echo "No package.json file found under current directory, cannot change repository locally."
exit 1
fi
COMMAND="COMMAND_NPM_LOCAL"
;;
esac
case "$1" in
"help")
SHOW_HELP
exit
;;
"taobao"|"tb")
INDEX=0
;;
"zju")
INDEX=1
;;
"huawei"|"hw")
INDEX=2
;;
"fastest")
#INDEX= function return value
echo "TODO"
exit
;;
"get")
case SCOPE_NAME in
"GLOBAL")
COMMAND="COMMAND_NPM_GET_GLOBAL"
exit
;;
"LOCAL")
COMMAND="COMMAND_NPM_GET_LOCAL"
;;
esac
echo "${!COMMAND}"
eval "${!COMMAND}"
exit
;;
"reset")
case $SCOPE_NAME in
"GLOBAL")
COMMAND="COMMAND_NPM_RESET_GLOBAL"
exit
;;
"LOCAL")
COMMAND="COMMAND_NPM_RESET_LOCAL"
;;
esac
eval COMMAND
exit
;;
esac
COMMAND="COMMAND_NPM_${SCOPE_NAME}"
MIRROR="${NPM_MIRRORS[$INDEX]}"
echo "${!COMMAND}${MIRROR}"
eval "${!COMMAND}${MIRROR}"
}
COMPOSER () {
INDEX=0
COMMAND=""
case $2 in
"GLOBAL")
COMMAND="COMMAND_COMPOSER_GLOBAL"
;;
"LOCAL")
if [ ! -e "composer.json" ]; then
echo "No composer.json file found under current directory, cannot change repository locally."
exit 1
fi
COMMAND="COMMAND_COMPOSR_LOCAL"
;;
esac
case "$1" in
"help")
SHOW_HELP
exit
;;
"cnpkg")
INDEX=0
;;
"lvchn")
INDEX=1
;;
"phpcomposer")
INDEX=2
;;
"aliyun")
INDEX=3
;;
"huawei")
INDEX=4
;;
"fastest")
#INDEX= function return value
echo "TODO"
exit
;;
"get")
case $SCOPE_NAME in
"GLOBAL")
COMMAND="COMMAND_COMPOSER_GET_GLOBAL"
;;
"LOCAL")
COMMAND="COMMAND_COMPOSER_GET_LOCAL"
;;
esac
echo "${!COMMAND}"
eval "${!COMMAND}"
exit
;;
"reset")
case SCOPE_NAME in
"GLOBAL")
COMMAND="COMMAND_COMPOSER_RESET_GLOBAL"
;;
"LOCAL")
COMMAND="COMMAND_COMPOSER_RESET_LOCAL"
;;
esac
echo "${COMMAND}"
eval "${!COMMAND}"
exit
;;
esac
COMMAND="COMMAND_COMPOSER_${SCOPE_NAME}"
MIRROR="${COMPOSER_MIRRORS[$INDEX]}"
echo "${!COMMAND}${MIRROR}"
eval "${!COMMAND}${MIRROR}"
}
if [ $# -eq 0 ]; then
echo "Please set which package you want to set mirror"
fi
if [ $# -eq 3 ]; then
case $3 in
'--global')
SCOPE_NAME="GLOBAL"
;;
'--local')
SCOPE_NAME="LOCAL"
;;
*)
SCOPE_NAME="LOCAL"
;;
esac
fi
case $1 in
help)
SHOW_HELP
;;
npm)
NPM $2 $SCOPE_NAME
;;
composer)
COMPOSER $2 $SCOPE_NAME
;;
*)
echo $2" not supported"
exit 1
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment