mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
132 lines
6.0 KiB
Markdown
132 lines
6.0 KiB
Markdown
|
|
# Developing Node.js using Dev Containers
|
||
|
|
|
||
|
|
Node.js publishes a [nightly image on DockerHub](https://hub.docker.com/r/nodejs/devcontainer) for
|
||
|
|
[Dev Containers](https://containers.dev/) that can be used to spin up a
|
||
|
|
development container that comes with pre-installed build dependencies and pre-genreated build cache.
|
||
|
|
|
||
|
|
When you need to test a few changes in the main branch and do not need
|
||
|
|
to change the V8 headers (which is rare), using the nightly image will allow you to compile your
|
||
|
|
changes from a fresh checkout quickly without having to compile the entire codebase, especially V8,
|
||
|
|
from scratch.
|
||
|
|
|
||
|
|
The Dev Container also allows you to test your changes in a different operating system, and to test
|
||
|
|
third-party code from bug reports safely with your work-in-progress Node.js branches in an isolated environment.
|
||
|
|
|
||
|
|
There are many command line tools, IDEs and services that [support Dev Containers](https://containers.dev/supporting).
|
||
|
|
Among them, [Visual Studio Code (VS Code)](https://code.visualstudio.com/) is a very popuplar option.
|
||
|
|
This guide will walk you through the steps to set up a Dev Container for Node.js development using VS Code.
|
||
|
|
You should be able to use the same [`nodejs/devcontainer:nightly` image](https://hub.docker.com/r/nodejs/devcontainer)
|
||
|
|
in other tools and services using generally similar steps.
|
||
|
|
|
||
|
|
## Prerequisites
|
||
|
|
|
||
|
|
Before you begin, ensure you have the following installed on your machine:
|
||
|
|
|
||
|
|
* [Docker](https://www.docker.com/get-started)
|
||
|
|
* [Visual Studio Code](https://code.visualstudio.com/)
|
||
|
|
* [Dev Containers extension for VS Code](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
|
||
|
|
|
||
|
|
## Setting Up the Dev Container
|
||
|
|
|
||
|
|
### 1. Clone the Node.js Repository
|
||
|
|
|
||
|
|
If you haven't already, clone the Node.js repository to your local machine.
|
||
|
|
|
||
|
|
```bash
|
||
|
|
git clone https://github.com/nodejs/node.git
|
||
|
|
```
|
||
|
|
|
||
|
|
Or follow [this guide](./pull-requests.md#setting-up-your-local-environment) if you are
|
||
|
|
setting up the git repository to contribute changes as pull requests.
|
||
|
|
|
||
|
|
### 2. Open the Repository in VS Code
|
||
|
|
|
||
|
|
Launch VS Code and open the cloned Node.js repository.
|
||
|
|
|
||
|
|
### 3. Start the Dev Container
|
||
|
|
|
||
|
|
* Press `Ctrl+Shift+P` or `Cmd+Shift+P` to open the command palette.
|
||
|
|
* Type `Dev Containers: Reopen in Container` and select it.
|
||
|
|
* Select the appropriate Dev Container configuration from the drop down. The base configuration in this
|
||
|
|
repository is `Node.js Dev Container` located in
|
||
|
|
[`.devcontainer/base/devcontainer.json`](../../.devcontainer/base/devcontainer.json), which should be
|
||
|
|
automatically detected by VS Code.
|
||
|
|
|
||
|
|
### 4. Wait for the Container to Build
|
||
|
|
|
||
|
|
VS Code will build the Dev Container based on the configuration file. This may take some time depending
|
||
|
|
on your internet connection and system performance.
|
||
|
|
|
||
|
|
After the Dev Container is built, it will start automatically. By default it will run `git restore-mtime` to
|
||
|
|
restore the modification times of the files in the working directory, in order to keep the build cache valid,
|
||
|
|
and you will see something like this in the terminal.
|
||
|
|
|
||
|
|
```text
|
||
|
|
Running the postCreateCommand from devcontainer.json...
|
||
|
|
|
||
|
|
[10136 ms] Start: Run in container: /bin/sh -c git restore-mtime
|
||
|
|
```
|
||
|
|
|
||
|
|
This may take a few seconds. Wait until it finishes before you open a new terminal.
|
||
|
|
|
||
|
|
### 5. Build your changes
|
||
|
|
|
||
|
|
Once the Dev Container is running, you can open a terminal in VS Code and run the build commands. By default,
|
||
|
|
your local repository is mounted inside a checkout in the Dev Container, so any changes you make will be reflected
|
||
|
|
in the container environment.
|
||
|
|
|
||
|
|
In the Dev Container, the necessary dependencies are already installed and Node.js has already been
|
||
|
|
compiled, so a usable cache will exist. For better developer experience, the
|
||
|
|
build tool used in the Dev Container is `ninja`, instead of `make`. See
|
||
|
|
[Building Node.js with Ninja](./building-node-with-ninja.md) for more details on using `ninja` to build Node.js.
|
||
|
|
|
||
|
|
```bash
|
||
|
|
./configure --ninja
|
||
|
|
ninja -C out/Release
|
||
|
|
```
|
||
|
|
|
||
|
|
As long as your local checkout is not too different from the main branch in the nightly image, the build
|
||
|
|
should be incremental and fast.
|
||
|
|
|
||
|
|
### 6. Leaving the Container
|
||
|
|
|
||
|
|
When you're done working in the Dev Container, open the command palette again and select
|
||
|
|
`Dev Containers: Reopen Folder locally` to go back to your local development environment.
|
||
|
|
|
||
|
|
## Customizing the Dev Container
|
||
|
|
|
||
|
|
The default configuration is located in
|
||
|
|
[`.devcontainer/base/devcontainer.json`](../../.devcontainer/base/devcontainer.json) which pairs with the
|
||
|
|
official [Node.js Nightly Dev Container image](https://github.com/nodejs/devcontainer).
|
||
|
|
This is tracked in version control. You can create a personal configuration by creating a new
|
||
|
|
directory in `.devcontainer/` and adding a `devcontainer.json` file there (for example,
|
||
|
|
`.devcontainer/local/devcontainer.json`), and configure VS Code to use it.
|
||
|
|
|
||
|
|
## Rebuilding the Dev Container
|
||
|
|
|
||
|
|
Docker will cache the already downloaded Dev Container images. If you wish to pull a new nightly image, you can do
|
||
|
|
so by running the following command in the terminal on your host machine:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker pull nodejs/devcontainer:nightly
|
||
|
|
```
|
||
|
|
|
||
|
|
The default configuration creates a volume to cache the build outputs between Dev Container restarts. If you wish to
|
||
|
|
clear the build cache, you can do so by deleting the volume named `node-devcontainer-cache`.
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker volume rm node-devcontainer-cache
|
||
|
|
```
|
||
|
|
|
||
|
|
To rebuild the Dev Container in VS Code, open the command palette and select
|
||
|
|
`Dev Containers: Rebuild and Reopen in Container`.
|
||
|
|
|
||
|
|
## Further Reading
|
||
|
|
|
||
|
|
* If you want to propose changes to the official Node.js Nightly Dev Container image, feedback is welcome at
|
||
|
|
[nodejs/devcontainer](https://github.com/nodejs/devcontainer). There, you can find the Dockerfile and
|
||
|
|
automated nightly workflows.
|
||
|
|
* [Visual Studio Code Dev Containers Documentation](https://code.visualstudio.com/docs/remote/containers)
|
||
|
|
* [GitHub's Introduction to Dev Containers](https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers)
|
||
|
|
* [The Dev Containers Specification](https://containers.dev/implementors/spec/)
|