npm / cli

the package manager for JavaScript
https://docs.npmjs.com/cli/
Other
8.38k stars 3.1k forks source link

[BUG] <prepare script called with CMD on windows> #7723

Open GMartigny opened 1 month ago

GMartigny commented 1 month ago

Is there an existing issue for this?

This issue exists in the latest npm version

Current Behavior

Hi,

I'm trying to have a script running on installation of a package and also on clone of the repo (setting up git hooks). So, I wrote a simple shell script:

#!/bin/bash

git config set core.hookspath $path

And use it in prepare and install script on package.json.

{
  "script": {
    "install": ".hooks/setup",
    "prepare": ".hooks/setup"
  }
}

As I'm on windows, I've already defined my shell and script-shell o point to C:\\Program Files\\git\\bin\\bash.exe.

Therefore, is I run .hooks/setup, npm run prepare or npm install the script is correctly executed. But, if I do npm pack or npm publish, I get an error .hooks is not a valid command on the line C:\WINDOWS\system32\cmd.exe /d /s /c .hooks/setup.

Expected Behavior

The shell config should be honored, whatever the way it is used.

Steps To Reproduce

  1. On windows
  2. run npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
  3. Have "prepare": "./test" on package.json's script
  4. Have a simple test executable file with echo "ok" for example
  5. Run npm run prepare => ✅ will print "ok"
  6. Run npm pack => ❌ will throw an error

Environment

GMartigny commented 1 month ago

Might be related to #6435 or #3972

milaninfy commented 1 week ago

This is reproducible on windows as described in issue report.

milaninfy commented 1 week ago

This behaviour seems expected as prepare script run for git dependencies as well as directory for which it's doing pack. scriptshell flag seems to be left out of prepare script intentionally. Need to check some specifics around the issue and code here before it's marked Triaged again.