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

Mic*_*llo 5 ddev

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

rfa*_*fay 7

我建议使用 .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
Run Code Online (Sandbox Code Playgroud)

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

有关如何使用和安装 nvm 的更多信息,请参阅自述文件

有关如何使用 ddev 的附加 Dockerfile 功能的更多信息,请参阅附加 Dockerfile 上的 ddev 文档

有关 Dockerfile 语法的详细信息,请参阅Docker 的 Dockerfile 参考

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

hooks:
  post-start:
    - exec: 'bash -l -c "nvm install v12.15.0 && nvm use v12.15.0"'
Run Code Online (Sandbox Code Playgroud)


Mic*_*llo 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
Run Code Online (Sandbox Code Playgroud)

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

-麦克风