npm binary + windows git bash + environment variables

时间:2018-04-24 09:26:43

标签: node.js bash npm npm-install git-bash

在我的节点模块中,我创建了一个使用npm i -g全局安装的工具。此工具是一个bash脚本,用于设置本地配置,调用其他一些脚本,还需要设置一些环境变量。 在Linux上,它可以正常调用

$ . my-setup 

$ source my-setup

这将调用my-setup,并且由于使用“dot”或source调用,脚本设置的环境变量将导出到调用shell。没问题。

但是,在Windows 7中的Git bash上运行相同的脚本时,会调用该脚本,但之后将关闭整个shell。 在研究NPM如何处理Windows中全局安装的二进制文件时,我注意到了

$ type my-setup
my-setup is /c/Users/jhh/AppData/Roaming/npm/my-setup

反过来扩展到

"$basedir/node_modules/<my-module>/my-setup.sh"   "$@"
exit $?

所以,我怀疑这里的最终退出声明是什么导致在Windows上获取此脚本时关闭调用shell。如果我手动

$ . "$basedir/node_modules/<my-module>/my-setup.sh"

然后脚本执行正常并且变量导出正确,而不关闭shell。

这里发生了什么? NPM的包装器调用脚本并调用exit $?的意图是什么?为什么在使用source调用时只会导致问题?我应该如何创建一个安装了npm的工具,该工具可以在Windows(Git Bash)和Linux上使用source.进行调用,将环境变量导出到调用shell并且不关闭它?

1 个答案:

答案 0 :(得分:0)

问题似乎是git bash does not work as a regular console

按照链接中的建议进行修复或使用完整的bash终端。