如何在DDEV Web容器中添加和使用nvm?

时间:2019-10-16 14:17:43

标签: ddev

当前,DDEV Web容器不附带nvm(节点版本管理器)。如何通过DDEV config.yaml文件添加和使用它?

4 个答案:

答案 0 :(得分:3)

在#ddev Slack通道(在Drupal Slack工作空间上)的@greggles和@heddn的帮助下,我将其与以下启动后挂钩一起使用:

hooks:
 post-start:
   - exec: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
   - exec: rm -f ../.nvmrc && export NVM_DIR="$HOME/.nvm" && source "$NVM_DIR/nvm.sh" && nvm install 8.11.1 && nvm use 8.11.1

这将安装nvm,然后将节点设置为版本8.11.1

-迈克

答案 1 :(得分:3)

我建议使用.ddev / web-build / Dockerfile方法,因为每次执行ddev start都不会花费您;它只是在每个项目中(以及在升级ddev时)构建一次。

将此文件放入.ddev / web-build / Dockerfile:

ARG BASE_IMAGE
FROM $BASE_IMAGE

ENV NVM_DIR=/usr/local/nvm
ENV NODE_DEFAULT_VERSION=v6.10.1

RUN curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh -o install_nvm.sh
RUN mkdir -p $NVM_DIR && bash install_nvm.sh
RUN echo "source $NVM_DIR/nvm.sh" >>/etc/profile
RUN bash -ic "nvm install $NODE_DEFAULT_VERSION && nvm use $NODE_DEFAULT_VERSION"
RUN chmod -R ugo+w $NVM_DIR

将NODE_DEFAULT_VERSION更改为您想要的样子。您可以添加它以使用nvm的所有功能。您可以安装多个版本,并根据需要在启动后挂钩中使用nvm use <otherversion>

有关如何使用和安装nvm的更多信息,请参见README

有关如何使用ddev的附加Dockerfile功能的更多信息,请参见ddev docs on add-on Dockerfile

有关Dockerfile语法的详细信息,请参见Docker's Dockerfile reference

nvm实际上是shell别名,因此默认情况下非交互命令在容器中不可用。因此,它在ddev ssh内部工作正常,但在启动后挂钩中无法立即使用。要在启动后挂钩中使用它,您可以执行以下操作:

hooks:
  post-start:
    - exec: 'bash -l -c "nvm install v12.15.0 && nvm use v12.15.0"'

答案 2 :(得分:2)

使用上述@rfay解决方案安装特定版本的Node之后,我在 .ddev / commands / web 中创建了一个自定义命令,该命令使我可以在容器中运行任何nvm命令,而不必< strong> ddev ssh 。

#!/bin/bash
## Description: Install or use node.
## Usage: nvm [flags] [args]
## Example: "nvm use or nvm install"
source /etc/profile && nvm $@

答案 3 :(得分:0)

另一种可能的解决方案是按照DDEV文档的建议将其添加到.ddev/web-build/dockerfile中:https://ddev.readthedocs.io/en/stable/users/extend/customizing-images/#adding-extra-dockerfiles-for-webimage-and-dbimage