Avoid bundling in JavaScript from nested node_modules.

Review Request #13721 — Created April 8, 2024 and submitted

Information

Review Board
release-7.x

Reviewers

When symlinking the Ink tree for development, I began to hit a confusing
issue with Spina class setup. It turns out that we were getting two
copies of Spina, two copies of Backbone, and two copies of Underscore in
our 3rdparty.js build.

The reason for this is that the Ink tree had its own node_modules, and
Rollup prioritized pulling Ink's dependencies from there. That gave us
unique copies for Ink that were namespaced internally separately from
Review Board's. That also meant that Spina state was then kept in two
places, causing all manner of problems.

The reason this was happening was that Rollup.js defaults to considering
any and all node_modules paths, by way of the moduleDirectories
setting. This differs from modulePaths, which is an explicit set of
paths (absolute or relative to the source tree).

Since we know we only want the top-level one, we can set
moduleDirectories to an empty list, ensuring that nested
node_modules are no longer considered when bundling.

Verified that this solved my duplicate module issue.

Summary ID
Avoid bundling in JavaScript from nested node_modules.
When symlinking the Ink tree for development, I began to hit a confusing issue with Spina class setup. It turns out that we were getting two copies of Spina, two copies of Backbone, and two copies of Underscore in our 3rdparty.js build. The reason for this is that the Ink tree had its own `node_modules`, and Rollup prioritized pulling Ink's dependencies from there. That gave us unique copies for Ink that were namespaced internally separately from Review Board's. That also meant that Spina state was then kept in two places, causing all manner of problems. The reason this was happening was that Rollup.js defaults to considering any and all `node_modules` paths, by way of the `moduleDirectories` setting. This differs from `modulePaths`, which is an explicit set of paths (absolute or relative to the source tree). Since we know we only want the top-level one, we can set `moduleDirectories` to an empty list, ensuring that nested `node_modules` are no longer considered when bundling.
02c89a2c3454a851e612894c0d6aaaacc6706b67
david
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to release-7.x (d6f9d39)