doc/development/fe_guide/dependencies.md
We use yarn@1 to manage frontend dependencies.
There are a few exceptions in the GitLab repository, stored in vendor/assets/.
These dependencies are defined in two groups within package.json, dependencies and devDependencies.
For our purposes, we consider anything that is required to compile our production assets a "production" dependency.
That is, anything required to run the webpack script with NODE_ENV=production.
Tools like eslint, jest, and various plugins and tools used in development are considered devDependencies.
This distinction is used by omnibus to determine which dependencies it requires when building GitLab.
Exceptions are made for some tools that we require in the
compile-production-assets CI job such as webpack-bundle-analyzer to analyze our
production assets post-compile.
See the main Dependencies page for general information about dependency updates.
Patches can be applied to dependencies with patch-package. Patches are stored under the patches/ directory.
Dependencies should only be patched as a last resort, as they are technical debt. Here are some acceptable reasons for patching a dependency:
node_modules. Ensure to include a comment in your edit which details:
yarn patch-package <package-name>.git add patches/.Patches are specific to the particular version of the dependency. When that dependency is updated, any patches for it must also be updated.
If the patch applies cleanly:
yarn patch-package <package-name> to rename the patch to apply to the new version.git add patches/.If the patch does not apply cleanly, determine whether the patch is still needed.
[!warning] Do not delete patches or parts of patches without confirming that they are no longer needed. If in doubt, ask the person who introduced the patch.