Runtime modifications to nodejs internals to help node/npm distributed programs run in bazel
patch any fs
like object such that symlinks that point outside a specified directory seem to be their targets instead of links
const fs = require('fs') const path = require('path') const patcher = require('@bazel/node-patches') patcher.fs(fs,'/my/files') fs.symlinkSync(path.resolve('./node_modules'),'/my/files/node_modules') // now try to stat. const stat = fs.lstatSync('/my/files/node_modules') console.log(stat.isSymbolicLink() === false)// true console.log(stat.isDirectory() === true) //true
this should not change the behavior of any paths that are outside of the root.
you can use the register script to include it in a -r flag to preload the patch before user code. This depends on setting the environment variable BAZEL_PATCH_ROOTS
BAZEL_PATCH_ROOTS=~/.cache/bazel node -r @bazel/node-patches/register <your app js>
{fs} = require('@bazel/node-patches')
to use this package as a dependency in bazel depend on it's exposed file group rule.
:node_patches
this filegroup will always expose one or more files needed to run this package and will not depend on npm install etc.