将使用 nvm 在项目上设置默认节点版本的点文件?
A dotfile that will set the default node version on a project using nvm?
在ruby中,当使用rbenv时,你可以创建一个.ruby-version
文件,并将它放在本地目录中。 https://gist.github.com/fnichol/1912050
我正在使用 NVM?
寻找类似的东西
问题:
是否有 属性 可在 package.json 中设置或要创建的文件将设置项目节点的默认版本?
您可以结合使用 NVM、项目目录中的点文件和一个名为 direnv
的小工具来执行此操作,该工具允许您在每个目录的基础上加载环境变量。
安装 NVM 和 direnv,然后 cd
到您要更改 Node 版本的目录。
在该目录中添加一个名为 .nvmrc
的文件,其中仅包含您要自动切换到的 Node 版本的版本号,例如:
6.2.2
然后将名为 .envrc
的环境配置文件添加到您的目录,其中包含此脚本:
nvmrc=~/.nvm/nvm.sh
if [ -e $nvmrc ]; then
source $nvmrc
nvm use
fi
PATH_add node_modules/.bin
如果你现在 cd
离开这个目录,然后 cd
回来,direnv 会启动,你应该被要求通过输入 [=18 将目录添加到你的 direnv 白名单=] 在提示符下。列入白名单后,direnv 将在您进入此目录时自动 运行 该脚本,将您的 Node 版本设置为 .nvmrc
.
中的版本号
作为奖励,它还会将 node_modules
目录添加到您的 PATH 中,因此您可以从这些目录执行二进制文件,而无需预先添加 node_modules
路径。
这是我的做法,与 Ross Shannon 的回答大体相似,但有一些不同:
- 您可以仅在
package.json
中指定节点版本,而无需 .nvmrc
文件
- 您也可以直接在
.envrc
中指定节点版本,同样无需 .nvmrc
文件
- 我没有将
node_modules/.bin
添加到 PATH,但如果这是您的首选行为,只需将 PATH_add node_modules/.bin
添加到 use_nvm
函数即可。
对我来说,支持 package.json
而不是 .nvmrc
的 Node 版本选择很重要,因为我不想担心保持两个文件同步(尤其是在有多个协作者的项目中) .也就是说,此解决方案仍然适用于 .nvmrc
.
此解决方案需要 direnv, nvm and optionally (if you want to be able to select the Node version from package.json) jq。
在 ~/.config/direnv/direnvrc
文件中,添加以下内容:
# To use:
# 1) Node version specified in package.json, in .envrc add:
# use nvm package.json
# This requires that package.json contains something like
# "engines": {
# "node": ">=6.9.2"
# },
#
# 2) Node version specified in .envrc add:
# use nvm 6.9.2
#
# 3) Node version specified in .nvmrc, in .envrc add:
# use nvm
use_nvm() {
local node_version=
if [[ $node_version = "package.json" ]]; then
if has jq; then
node_version=$(jq --raw-output .engines.node package.json | tr -d "<=> ")
else
echo "Parsing package.json for node version to use with direnv requires jq"
fi
fi
nvm_sh=~/.nvm/nvm.sh
if [[ -e $nvm_sh ]]; then
source $nvm_sh
nvm use $node_version
fi
}
在您的项目目录中,添加一个调用 use nvm
的 .envrc
文件,例如:
use nvm package.json
但是,对于我的 .envrc
:
,我更喜欢下面这样的东西
if declare -Ff use_nvm >/dev/null; then
use nvm package.json
fi
对于具有共享 .envrc
的共享项目,这样没有 use nvm
定义的协作者就不会收到错误。
现在,当您进入项目目录时,将自动使用您想要的 Node 版本(第一次,系统会提示您将对 .envrc
和 direnv allow
的更改列入白名单)。
direnv 的 stdlib 中内置了一些对此的原生支持。它记录在他们的 wiki, but the source 中,同样易于阅读,或键入 direnv stdlib
找到它)。
$ node -v
v8.0.0
$ cat .node-version
4.3.2
$ cat .envrc
use node
$ export NODE_VERSIONS=~/.nvm/versions/node
$ export NODE_VERSION_PREFIX=v
$ direnv allow
direnv: loading ~/.config/direnv/direnvrc
direnv: loading .envrc
direnv: using node
direnv: Successfully loaded NodeJS v4.3.2 (via .node-version), from prefix (~/.nvm/versions/node/v4.3.2)
direnv: export +CPATH +LD_LIBRARY_PATH +LIBRARY_PATH +PKG_CONFIG_PATH ~MANPATH ~PATH
$ node -v
v4.3.2
$ direnv deny
direnv: error .envrc is blocked. Run `direnv allow` to approve its content.
$ node -v
v8.0.0
如果你想要 node_modules/.bin
在你的路径中,只需将行 layout node
添加到你的 .envrc
(source 也在 direnv stdlib
输出中) .
Note: This solution does not switch the folder version automatically.
其他答案对我帮助不大,因此,这是我遵循的解决方案:
创建一个 .nvmrc
文件并指定您希望应用 运行 运行的节点版本。
touch .nvmrc
打开文件并指定版本,比如13.3.0
Post你在.nvmrc
里定义了一个版本,你也可以在package.json
文件里定义engines
,保证版本符合要求,如果没有,运行ning npm install
将失败。
"engineStrict": true,
"engines": {
"node": "13.3.0"
}
以下是节点版本不匹配时您会遇到的错误。
最后,要确保它切换到正确的节点版本,您可以运行以下命令post导航到目录。
nvm use
这将切换到所需的版本,或者您可以将其添加到 package.json
中的 script
命令之一,例如:
"scripts": {
/*
* here, the second command (nodemon server.js) will change base on the dev
* server you are using and the path where you've server.js
*/
"dev:app:run": "nvm use; nodemon server.js"
},
以上将在启动服务器之前切换节点版本。
在ruby中,当使用rbenv时,你可以创建一个.ruby-version
文件,并将它放在本地目录中。 https://gist.github.com/fnichol/1912050
我正在使用 NVM?
问题:
是否有 属性 可在 package.json 中设置或要创建的文件将设置项目节点的默认版本?
您可以结合使用 NVM、项目目录中的点文件和一个名为 direnv
的小工具来执行此操作,该工具允许您在每个目录的基础上加载环境变量。
安装 NVM 和 direnv,然后 cd
到您要更改 Node 版本的目录。
在该目录中添加一个名为 .nvmrc
的文件,其中仅包含您要自动切换到的 Node 版本的版本号,例如:
6.2.2
然后将名为 .envrc
的环境配置文件添加到您的目录,其中包含此脚本:
nvmrc=~/.nvm/nvm.sh
if [ -e $nvmrc ]; then
source $nvmrc
nvm use
fi
PATH_add node_modules/.bin
如果你现在 cd
离开这个目录,然后 cd
回来,direnv 会启动,你应该被要求通过输入 [=18 将目录添加到你的 direnv 白名单=] 在提示符下。列入白名单后,direnv 将在您进入此目录时自动 运行 该脚本,将您的 Node 版本设置为 .nvmrc
.
作为奖励,它还会将 node_modules
目录添加到您的 PATH 中,因此您可以从这些目录执行二进制文件,而无需预先添加 node_modules
路径。
这是我的做法,与 Ross Shannon 的回答大体相似,但有一些不同:
- 您可以仅在
package.json
中指定节点版本,而无需.nvmrc
文件 - 您也可以直接在
.envrc
中指定节点版本,同样无需.nvmrc
文件 - 我没有将
node_modules/.bin
添加到 PATH,但如果这是您的首选行为,只需将PATH_add node_modules/.bin
添加到use_nvm
函数即可。
对我来说,支持 package.json
而不是 .nvmrc
的 Node 版本选择很重要,因为我不想担心保持两个文件同步(尤其是在有多个协作者的项目中) .也就是说,此解决方案仍然适用于 .nvmrc
.
此解决方案需要 direnv, nvm and optionally (if you want to be able to select the Node version from package.json) jq。
在 ~/.config/direnv/direnvrc
文件中,添加以下内容:
# To use:
# 1) Node version specified in package.json, in .envrc add:
# use nvm package.json
# This requires that package.json contains something like
# "engines": {
# "node": ">=6.9.2"
# },
#
# 2) Node version specified in .envrc add:
# use nvm 6.9.2
#
# 3) Node version specified in .nvmrc, in .envrc add:
# use nvm
use_nvm() {
local node_version=
if [[ $node_version = "package.json" ]]; then
if has jq; then
node_version=$(jq --raw-output .engines.node package.json | tr -d "<=> ")
else
echo "Parsing package.json for node version to use with direnv requires jq"
fi
fi
nvm_sh=~/.nvm/nvm.sh
if [[ -e $nvm_sh ]]; then
source $nvm_sh
nvm use $node_version
fi
}
在您的项目目录中,添加一个调用 use nvm
的 .envrc
文件,例如:
use nvm package.json
但是,对于我的 .envrc
:
if declare -Ff use_nvm >/dev/null; then
use nvm package.json
fi
对于具有共享 .envrc
的共享项目,这样没有 use nvm
定义的协作者就不会收到错误。
现在,当您进入项目目录时,将自动使用您想要的 Node 版本(第一次,系统会提示您将对 .envrc
和 direnv allow
的更改列入白名单)。
direnv 的 stdlib 中内置了一些对此的原生支持。它记录在他们的 wiki, but the source 中,同样易于阅读,或键入 direnv stdlib
找到它)。
$ node -v
v8.0.0
$ cat .node-version
4.3.2
$ cat .envrc
use node
$ export NODE_VERSIONS=~/.nvm/versions/node
$ export NODE_VERSION_PREFIX=v
$ direnv allow
direnv: loading ~/.config/direnv/direnvrc
direnv: loading .envrc
direnv: using node
direnv: Successfully loaded NodeJS v4.3.2 (via .node-version), from prefix (~/.nvm/versions/node/v4.3.2)
direnv: export +CPATH +LD_LIBRARY_PATH +LIBRARY_PATH +PKG_CONFIG_PATH ~MANPATH ~PATH
$ node -v
v4.3.2
$ direnv deny
direnv: error .envrc is blocked. Run `direnv allow` to approve its content.
$ node -v
v8.0.0
如果你想要 node_modules/.bin
在你的路径中,只需将行 layout node
添加到你的 .envrc
(source 也在 direnv stdlib
输出中) .
Note: This solution does not switch the folder version automatically.
其他答案对我帮助不大,因此,这是我遵循的解决方案:
创建一个 .nvmrc
文件并指定您希望应用 运行 运行的节点版本。
touch .nvmrc
打开文件并指定版本,比如13.3.0
Post你在.nvmrc
里定义了一个版本,你也可以在package.json
文件里定义engines
,保证版本符合要求,如果没有,运行ning npm install
将失败。
"engineStrict": true,
"engines": {
"node": "13.3.0"
}
以下是节点版本不匹配时您会遇到的错误。
最后,要确保它切换到正确的节点版本,您可以运行以下命令post导航到目录。
nvm use
这将切换到所需的版本,或者您可以将其添加到 package.json
中的 script
命令之一,例如:
"scripts": {
/*
* here, the second command (nodemon server.js) will change base on the dev
* server you are using and the path where you've server.js
*/
"dev:app:run": "nvm use; nodemon server.js"
},
以上将在启动服务器之前切换节点版本。