有没有办法在预启动的 npm 脚本中自动运行“nvm use”?

问题描述 投票:0回答:3

我希望在运行“npm start”时自动调用“nvm use”。 所以我想出了这个解决方案:

package.json 文件

"scripts": {
  "prestart": "sh test.sh",
  "start": "nodemon index.js"
}

.nvmrc 文件

4

test.sh文件

#!/bin/bash

if [ -d ~/.nvm ]
  then
    source ~/.nvm/nvm.sh

    nvm use
fi

这可以工作并在 nvm 版本之间切换控制台输出是:

> sh test.sh

Found '/my-user-path/.nvmrc' with version <4>
Now using node v4.2.2 (npm v2.14.7)

> [email protected] start /app-path/
> nodemon index.js

但是当我调用表单index.js“console.log(process.versions);”时nvm 脚本可能在不同的进程中执行,因此输出为:

{ 
  http_parser: '2.6.0',
  node: '5.1.0',
  v8: '4.6.85.31',
  uv: '1.7.5',
  zlib: '1.2.8',
  ares: '1.10.1-DEV',
  icu: '56.1',
  modules: '47',
  openssl: '1.0.2d' 
}

关于如何以适当的方式处理这个问题有什么建议吗?

谢谢

javascript node.js bash nvm
3个回答
30
投票

通常在 Mac 上,nvm.sh 文件位于您的主路径中。如果您有多个 Mac 用户处理代码,请使用 $HOME 变量。

"scripts": {
    "prestart": "source $HOME/.nvm/nvm.sh; nvm use"
}

我会将此作为评论添加到上述回复中,但我不允许:(


14
投票

你的 package.json 可能看起来像

"scripts": {
    "start": "source /whereever/located/nvm.sh; nvm use; nodemon index.js"
}

解释一下。 “开始”行是单个 shell 实例。因此,您必须让 nvm 初始化该 shell 实例中的 PATH。另外,

nvm
是一个shell函数,而不是可执行的shell脚本。 nvm 函数位于 shell 实例中,是通过获取 nvm.sh 文件创建的。

抱歉进行编辑,因为我没有测试前两个。


3
投票

对于苹果电脑 例如:

"scripts": {
    "dev": "source $HOME/.nvm/nvm.sh; nvm use v14.17.5 && cross-env ENV_TYPE=localhost umi dev"
  },
© www.soinside.com 2019 - 2024. All rights reserved.