From 9ba5092334f74bb384945e586714975299dadc89 Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Wed, 29 Jul 2026 10:41:29 -0300 Subject: [PATCH] fix: resolve compiled output from dist in bin and postinstall Both resolve into lib/ relative to their own location, which stopped working when the build moved output to dist/: lib/ now holds only TypeScript, so running ./bin/tns or postinstall.js from a checkout fails with MODULE_NOT_FOUND. The published package is unaffected, since dist/ is its root and lib/ already sits next to bin/ there. Both now prefer dist/lib when it exists and fall back otherwise, which covers the checkout and the package without either needing to know which it is. The other bin entries delegate to ./tns, so they are fixed with it. npm install in a checkout runs postinstall and would hit the same failure - masked only because npm run setup passes --ignore-scripts. --- bin/tns | 9 ++++++++- postinstall.js | 9 +++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/bin/tns b/bin/tns index fb5b323617..4dc69af484 100755 --- a/bin/tns +++ b/bin/tns @@ -2,7 +2,14 @@ "use strict"; var path = require("path"), - pathToLib = path.join(__dirname, "..", "lib"), + fs = require("fs"), + // In the published package dist/ is the root, so lib/ already sits next to + // bin/. In a source checkout lib/ holds only TypeScript and the compiled + // output lives under dist/. + distLib = path.join(__dirname, "..", "dist", "lib"), + pathToLib = fs.existsSync(distLib) + ? distLib + : path.join(__dirname, "..", "lib"), pathToCommon = path.join(pathToLib, "common"); require(path.join(pathToCommon, "verify-node-version")).verifyNodeVersion(); diff --git a/postinstall.js b/postinstall.js index 5d3e0d3e25..1efef2b89e 100644 --- a/postinstall.js +++ b/postinstall.js @@ -2,9 +2,14 @@ var child_process = require("child_process"); var path = require("path"); -var constants = require(path.join(__dirname, "lib", "constants")); +var fs = require("fs"); +// In the published package dist/ is the root; in a source checkout the compiled +// output lives under dist/ while lib/ holds only TypeScript. +var distLib = path.join(__dirname, "dist", "lib"); +var pathToLib = fs.existsSync(distLib) ? distLib : path.join(__dirname, "lib"); +var constants = require(path.join(pathToLib, "constants")); var commandArgs = [path.join(__dirname, "bin", "tns"), constants.POST_INSTALL_COMMAND_NAME]; -var helpers = require(path.join(__dirname, "lib", "common", "helpers")); +var helpers = require(path.join(pathToLib, "common", "helpers")); if (helpers.isInstallingNativeScriptGlobally()) { child_process.spawn(process.argv[0], commandArgs, { stdio: "inherit" }); }