Installing Node in Your Lando PHP Service
Some frontend tooling kits like Emulsify or Pattern Lab may assume that composer/php
can invoke yarn/npm/node
and vice-versa. This pattern, sadly, is fundamentally at odds with Lando's one-thing-per-container model.
You can, however, get around it by installing the needed dependencies directly in the service that requires them.
We've found installing node
inside a Lando PHP service to generally be the path of least resistance.
1. Using build steps
Below is an example that installs node12
using build-steps.
services:
myservice:
type: php
build_as_root:
# Note that you will want to use the script for the major version of node you want to install
# See: https://github.com/nodesource/distributions/blob/master/README.md#installation-instructions
- curl -sL https://deb.nodesource.com/setup_12.x | bash -
- apt-get install -y nodejs
tooling:
node:
service: myservice
npm:
service: myservice
You can verify with:
lando node -v
lando npm -v
2. Extending a Dockerfile
If you are planning to extend your service with additional build steps or would like to cache the build steps for a faster lando rebuild
you should instead consider extending with a Dockerfile as in the example below:
.lando.yml
services:
myservice:
type: php:custom
via: cli
overrides:
image: lando/php:7.4-with-node12
build:
context: ./
dockerfile: Dockerfile.node
tooling:
node:
service: myservice
npm:
service: myservice
Dockerfile.node
FROM devwithlando/php:7.4-apache-2
# Choose the major node version
ENV NODE_VERSION=12
# Install node
RUN curl -sL "https://deb.nodesource.com/setup_${NODE_VERSION}.x" | bash - \
&& apt-get install -y nodejs
Again, you can verify with:
lando node -v
lando npm -v