在 makefile 中使用 nvm 切换节点环境

Using nvm in a makefile to switch node environment

我正在尝试使用 Makefile 构建 Node 项目。作为第一步,我想使用 NVM 设置节点版本。我为此尝试了以下代码:

.PHONY: viz-ui
viz-ui:
    . ${HOME}/.nvm/nvm.sh && nvm use 14.17.0
    node -v

我在 运行 make 之前设置了 nvm use 16 来测试输出。在 运行 make viz-ui 之后,我得到以下输出:

. /home/vijayth2/.nvm/nvm.sh && nvm use 14.17.0
Now using node v14.17.0 (npm v6.14.13)
node -v
v16.14.2

简而言之,节点切换到 14.17.0 没有反映在 makefile 中,我该如何解决?或者我对此的理解有什么差距?

食谱的每一行都是 运行 brand-new shell。因此,当你到达 node -v 行时,它在一个新的 shell 中执行,它对设置不同节点版本的前一个一无所知(这是在单独的 shell 和 long走了)。

你基本上有两个选择:

  1. 重写配方,以便在一次 shell 调用中全部 运行,例如:
.PHONY: viz-ui
viz-ui:
    . ${HOME}/.nvm/nvm.sh && nvm use 14.17.0; \
    node -v

  1. 利用 .ONESHELL 指令,以便所有配方在单个 shell.
  2. 中执行