Search
⌃K
Links

JavaScript FAQ

Which versions of Node.js does Release support?

You can use any version of Node.js with Release.
For Docker containers:
For Docker containers, you can pull in a source image and version with a tag like FROM node:16 at the top of your Dockerfile. Internally, we use nvm and recommend you do too. Take a look at this example of adding nvm to an Alpine image.
For static build images:
For static build images, we use nvm, which will use whatever version of Node.js you have in a .nvmrc file. You can specify a global version at the top of your build directory and override it with different versions further down the directory structure if you need to. Read the nvm docs for more information, or take a look at this Stack Overflow answer.

How to Control Javascript Out of Memory or Performance Issues?

Javascript default memory heap settings are usually correct; setting your pod's memory resource limits anywhere from 1-4GiB is probably fine. But restricting the amount of memory available to Javascript may result in bottlenecks and slowdowns that are not easy to predict or understand. Generally, Javascript will only use a single CPU and therefore, allowing the CPU to address more memory can allow the CPU to be free to process more data without waiting for objects to be swapped in and out of working memory. However, just as Javascript cannot generally use more than a single CPU, it cannot address more memory without further help. Typically you will need to set the following environment variable (or build argument) to address memory above the 4-32GiB range. As an example, given the following memory limits, the appropriate environment variable settings would look like this:
resources:
memory:
limits: 9Gi
requests: 4Gi
Example memory limits for a node application
services:
frontend:
- key: NODE_OPTIONS
value: "--max-old-space-size=8192"
Example settings of options to pass to the node application to use 8GiB of RAM. Notice this is slightly less than the limits set by the pod resources since the container will use more memory than just the old space size.
To ensure that your application has enough CPU resources, we do not recommend setting the resource limits higher than 1 since Javascript is usually single threaded. However, we do not recommend setting the requested resources too low as well since that can cause scheduler and contention issues in your Kubernetes cluster at the node level. We encourage you to use the following CPU resource limits for any production or perfomance-based Javascript applications:
resources:
cpu:
limits: 1
requests: 1

How to Filter Excessive Log Entries in Yarn?

Yarn will often output multiple hundreds (or even thousands) of log lines for debugging output. This can bog down the build process and slow down scanning the logs looking for useful information. Add the following to your .yarnrc.yaml file to filter out certain types of Yarn log output lines (and you can add more if they are not important to you). YN0013 is the debug output showing which package is being fetched and installed and there are usually many of them in any node_modules directory.
logFilters:
- code: YN0013
level: discard

Does Release support private npm libraries during build?

Yes, but using npm libraries might require some additional work on your part. This guide to Docker and private modules from the npm documentation provides all the technical details. In brief:
  1. 1.
    Add a .nprmrc file to your code repository with contents that look something like //registry.npmjs.org/:_authToken=${NPM_TOKEN}. Do not fill in your token here, use the variable that will be substituted later (this file is safe to check into your code version system).
  2. 2.
    Add a build argument to your Dockerfile, preferably somewhere near the top (add a comment so you can remember why you put it there). The line looks like ARG NPM_TOKEN.
  3. 3.
    Add a copy command so the file is copied into your Docker container. The copy command should be placed below the build argument but above the npm install command. The line looks like COPY .npmrc .npmrc.
  4. 4.
    Push your changes to GitHub or Bitbucket on a branch.
  5. 5.
    Be sure to generate a token or use an existing one that is READ-ONLY and can be revoked safely without affecting your other pipelines. Anyone who is an owner of your Release account can see and change these build arguments.
  6. 6.
    Now add your token to a build argument in the Builds tab of your Account Settings:
Once you've completed these steps, your build should use the npm token you supplied to pull private libraries. If it works, merge your changes to the default or main development branch.

Can I use GitHub Packages with Release?

To install GitHub Packages, you'll need to follow the same steps as outlined for npm repositories above. Ensure that your token has privileges for ['read:packages']
Your .npmrc file should look similar to:
//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}
@myorg:registry=https://npm.pkg.github.com/

What about static service deployments?

For static service deployments, you can use environment variables to add your token. Remember to add secret: true.
While app-level build arguments will work for static service deployments, these are usually reserved for Docker images.

Does Release support Yarn?

To use Yarn, follow the instructions for npm above, then add a .yarnrc.yaml file for the private repository. Take a look at this Gist for more information.