oh-my-zsh/plugins/node-modules-path/node-modules-path.plugin.zsh
Hlynur Sigurthorsson 708f3a51bc Adding plugin node-modules-path
If chpwd is changed to a path where any folder within that subpath
contains a node_modules folder, then that path + .bin is added to the
PATH env variable.

The reason for writing this plugin is that I often open up atom directly
from the shell in a directory of interest. If I have flow installed
locally then I have to add the node_modules folder in that path to PATH
before I open up Atom.
2017-05-26 20:51:12 +00:00

40 lines
933 B
Bash

SCRIPT_PATH=${0:a:h}
NODE_MODULES_PATH=""
# Removes applied path from PATH.
function remove_from_path {
PATH=${PATH/":$1"/}
PATH=${PATH/"$1:"/}
}
# Checks if given string is found in PATH.
function is_on_path {
if [[ "$1" ]]; then
echo $PATH | grep "$1" >/dev/null
else
return 1
fi
}
chpwd_handler() {
nearest_found_nm=`/usr/bin/env python $SCRIPT_PATH/path_check.py $PWD`
if [[ "$nearest_found_nm" ]] && is_on_path "$nearest_found_nm/node_modules/.bin"; then
return
fi
if [[ "$NODE_MODULES_PATH" ]]; then
remove_from_path "$NODE_MODULES_PATH/node_modules/.bin"
export NODE_MODULES_PATH=""
fi
if [[ "$nearest_found_nm" ]]; then
echo "\033[1;34mFound node_modules in $nearest_found_nm, adding to path\033[0m"
PATH="$PATH:$nearest_found_nm/node_modules/.bin"
NODE_MODULES_PATH="$nearest_found_nm"
fi
}
chpwd_functions=(${chpwd_functions[@]} "chpwd_handler")
chpwd_handler