chore: script/bootstrap fails when node cannot find a dependency in package.json (closes #263)
yarn install exits 0 without touching node_modules whenever node_modules/.yarn-integrity matches yarn.lock, so a package deleted from node_modules stayed deleted while bootstrap printed "bootstrap complete". After the install, bootstrap now asks node for the package.json of every package listed in dependencies and devDependencies of package.json, and on the first it cannot find it names the package and the fix: rm -rf node_modules && make bootstrap. A package whose exports hides its package.json (ethers, libsodium-wrappers-sumo) makes node throw ERR_PACKAGE_PATH_NOT_EXPORTED, which it does only after finding the package, so that error counts as found. Model: opus-5-5
This commit was merged in pull request #483.
This commit is contained in:
@@ -127,6 +127,40 @@ install_js_deps() {
|
||||
fi
|
||||
}
|
||||
|
||||
# run_node: run node from the repo root, through nvm when node is not on PATH;
|
||||
# the script comes on stdin
|
||||
run_node() {
|
||||
if missing node && [ -s "$HOME/.nvm/nvm.sh" ]; then
|
||||
nvm_sh "nvm use $NODE_VERSION >/dev/null && cd \"$ROOT\" && node"
|
||||
else
|
||||
node
|
||||
fi
|
||||
}
|
||||
|
||||
# yarn install exits 0 without touching node_modules once
|
||||
# node_modules/.yarn-integrity matches yarn.lock, so a package deleted from
|
||||
# node_modules stays deleted. Fail unless node finds every package listed in
|
||||
# dependencies and devDependencies of package.json, by its package.json. When a
|
||||
# package's exports does not list that file, node throws
|
||||
# ERR_PACKAGE_PATH_NOT_EXPORTED, which it can only do once it has found the
|
||||
# package, so that error counts as found.
|
||||
check_js_deps() {
|
||||
run_node <<'EOF'
|
||||
const { dependencies, devDependencies } = require("./package.json");
|
||||
for (const name of Object.keys({ ...dependencies, ...devDependencies })) {
|
||||
try {
|
||||
require.resolve(name + "/package.json");
|
||||
} catch (e) {
|
||||
if (e.code !== "ERR_PACKAGE_PATH_NOT_EXPORTED") {
|
||||
console.error(`bootstrap: node cannot find ${name} after yarn install`);
|
||||
console.error(" fix: rm -rf node_modules && make bootstrap");
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
}
|
||||
|
||||
main() {
|
||||
cd "$ROOT"
|
||||
|
||||
@@ -136,6 +170,7 @@ main() {
|
||||
ensure_node
|
||||
ensure_yarn
|
||||
install_js_deps
|
||||
check_js_deps
|
||||
|
||||
echo "bootstrap complete"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user