diff --git a/nvm.sh b/nvm.sh index 57759b2..4b242bc 100755 --- a/nvm.sh +++ b/nvm.sh @@ -1652,21 +1652,32 @@ $NVM_LS_REMOTE_IOJS_OUTPUT" | command grep -v "N/A" | sed '/^$/d')" return 2 fi - local INSTALLS + local NPMLIST if [ "_$PROVIDED_VERSION" = "_system" ]; then if ! nvm_has_system_node && ! nvm_has_system_iojs; then echo 'No system version of node or io.js detected.' >&2 return 3 fi - INSTALLS=$(nvm deactivate > /dev/null && npm list -g --depth=0 | command tail -n +2 | command grep -o -e ' [^@]*' | command cut -c 2- | command grep -vx npm | command xargs) + NPMLIST=$(nvm deactivate > /dev/null && npm list -g --depth=0 | command tail -n +2) else local VERSION VERSION="$(nvm_version "$PROVIDED_VERSION")" - INSTALLS=$(nvm use "$VERSION" > /dev/null && npm list -g --depth=0 | command tail -n +2 | command grep -o -e ' [^@]*' | command cut -c 2- | command grep -vx npm | command xargs) + NPMLIST=$(nvm use "$VERSION" > /dev/null && npm list -g --depth=0 | command tail -n +2) fi + local INSTALLS + INSTALLS=$(echo "$NPMLIST" | command sed -e '/ -> / d' -e 's/^.* \(.*\)@.*/\1/' -e '/^npm$/ d' | command xargs) + echo "Copying global packages from $VERSION..." echo "$INSTALLS" | command xargs npm install -g --quiet + + local LINKS + LINKS=$(echo "$NPMLIST" | command sed -n 's/.* -> \(.*\)/\1/ p') + + echo "Linking global packages from $VERSION..." + for LINK in $LINKS; do + (cd "$LINK" && npm link) + done ;; "clear-cache" ) command rm -f $NVM_DIR/v* "$(nvm_version_dir)" 2>/dev/null @@ -1712,4 +1723,3 @@ elif nvm ls default >/dev/null; then elif nvm_rc_version >/dev/null 2>&1; then nvm use >/dev/null fi - diff --git a/test/slow/nvm reinstall-packages/should work as expected b/test/slow/nvm reinstall-packages/should work as expected index 7f39197..ef58297 100755 --- a/test/slow/nvm reinstall-packages/should work as expected +++ b/test/slow/nvm reinstall-packages/should work as expected @@ -5,8 +5,9 @@ die () { echo "$@" ; exit 1; } . ../../../nvm.sh nvm use 0.10.28 +(cd test-npmlink && npm link) -EXPECTED_PACKAGES="autoprefixer bower david eslint grunt-cli grunth-cli http-server jshint marked node-gyp npmlist recursive-blame uglify-js yo" +EXPECTED_PACKAGES="autoprefixer bower david eslint grunt-cli grunth-cli http-server jshint marked node-gyp npmlist recursive-blame test-npmlink uglify-js yo" echo "$EXPECTED_PACKAGES" | xargs npm install -g --quiet @@ -22,3 +23,5 @@ FINAL_PACKAGES=$(get_packages) [ "$FINAL_PACKAGES" = "$EXPECTED_PACKAGES" ] || die "final packages ($FINAL_PACKAGES) did not match expected packages ($EXPECTED_PACKAGES)" [ "$ORIGINAL_PACKAGES" != "$FINAL_PACKAGES" ] || die "original packages matched final packages ($ORIGINAL_PACKAGES)" + +[ $(test-npmlink) = 'ok' ] || die "failed to run test-npmlink" diff --git a/test/slow/nvm reinstall-packages/test-npmlink/index.js b/test/slow/nvm reinstall-packages/test-npmlink/index.js new file mode 100755 index 0000000..9558516 --- /dev/null +++ b/test/slow/nvm reinstall-packages/test-npmlink/index.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +console.log('ok') diff --git a/test/slow/nvm reinstall-packages/test-npmlink/package.json b/test/slow/nvm reinstall-packages/test-npmlink/package.json new file mode 100644 index 0000000..e596ea4 --- /dev/null +++ b/test/slow/nvm reinstall-packages/test-npmlink/package.json @@ -0,0 +1,10 @@ +{ + "name": "test-npmlink", + "version": "0.0.1", + "description": "Stub package for testing npm link", + "bin": { + "test-npmlink": "index.js" + }, + "author": "hax", + "license": "ISC" +}