zkat / npx

execute npm package binaries (moved)
https://github.com/npm/npx
Other
2.63k stars 105 forks source link

feat(node-path): append temp packages to $NODE_PATH #180

Open zkat opened 6 years ago

zkat commented 6 years ago

Ref: #160

This makes it so you can do npx -p lodash node -r lodash when lodash is not already installed. One big downside of this patch is that because of the semantics of that node feature, NODE_PATH will always be treated as a fallback. That is, if you already have one version of lodash installed in a local npm project you're currently in the directory of, you won't be able to override it with the temporary install.

jasisk commented 6 years ago

I threw together a sloppy, terribad, not OS-independent workaround while we wait for this one.

$ npx -q -p lodash -p @sisk/npx repl -e "console.log(require('lodash').VERSION)"
4.17.10

$ npx -q -p lodash -p @sisk/npx exec sh -c 'echo ${NODE_PATH}'
/Users/kittens/.npm/_npx/80711/lib/node_modules

The bins are this nightmare:

#!/bin/sh
NODE_PATH="$(printf "%s" "$PATH" | sed -e 's/:.*$//' -e 's:/[^/]*$::')"
[ "${0##*/}" = 'repl' ] && set -- node "$@"
exec env NODE_PATH="$NODE_PATH/lib/node_modules" "$@"