Mat*_*ood 7 javascript version-control node.js nvm
在ruby中使用rbenv时,您可以创建一个.ruby-version文件并将其放在本地目录中.https://gist.github.com/fnichol/1912050
我正在寻找与NVM类似的东西?
题:
是否有要在package.json中设置的属性或要创建的文件,它将设置项目的节点的默认版本?
Ros*_*non 12
您可以使用项目目录中的NVM,dotfiles和一个名为的小工具来执行此操作,该工具direnv允许您基于每个目录加载环境变量.
安装NVM和direnv,然后安装cd到要更改节点版本的目录.
添加.nvmrc在该目录中调用的文件,其中仅包含要自动切换到的节点版本的版本号,例如:
6.2.2
Run Code Online (Sandbox Code Playgroud)
然后添加一个调用.envrc到您的目录的环境配置文件,其中包含以下脚本:
nvmrc=~/.nvm/nvm.sh
if [ -e $nvmrc ]; then
source $nvmrc
nvm use
fi
PATH_add node_modules/.bin
Run Code Online (Sandbox Code Playgroud)
如果你现在cd离开这个目录,然后再cd回来,direnv将启动,你应该被要求通过direnv allow .在提示符下输入将目录添加到你的direnv白名单.一旦列入白名单,只要您进入此目录,direnv就会自动运行该脚本,并将您的节点版本设置为版本号.nvmrc.
作为奖励,它还会将node_modules目录添加到PATH,因此您可以从这些目录执行二进制文件而无需预先添加node_modules路径.
这是我的做法,通常与罗斯香农的答案类似,但有一些区别:
package.json,而不需要.nvmrc文件.envrc,同样无需.nvmrc文件node_modules/.bin到 PATH,但如果这是您的首选行为,只需添加PATH_add node_modules/.bin到该use_nvm函数即可。对我来说,支持 Node 版本选择package.json很.nvmrc重要,因为我不想担心两个文件保持同步(特别是在具有多个协作者的项目上)。也就是说,该解决方案仍然适用于.nvmrc.
此解决方案需要direnv、nvm和可选的(如果您希望能够从 package.json 选择 Node 版本)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=$1
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
}
Run Code Online (Sandbox Code Playgroud)
在您的项目目录中,添加一个.envrc调用的文件use nvm,例如:
use nvm package.json
Run Code Online (Sandbox Code Playgroud)
但是,我更喜欢以下内容.envrc:
if declare -Ff use_nvm >/dev/null; then
use nvm package.json
fi
Run Code Online (Sandbox Code Playgroud)
对于具有共享的共享项目,.envrc以便未定义的协作者use nvm不会收到错误。
现在,当您进入项目目录时,将自动使用您所需的 Node 版本(第一次,系统会提示您将更改列入白名单.envrc)direnv allow。
现在有一些内置于 direnv 的 stdlib 的本地支持。它记录在他们的wiki 中,但源代码同样易于阅读或键入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
Run Code Online (Sandbox Code Playgroud)
如果您想要node_modules/.bin在您的路径中,只需将行添加layout node到您的.envrc(源也在direnv stdlib输出中)。
| 归档时间: |
|
| 查看次数: |
2095 次 |
| 最近记录: |