rushstack icon indicating copy to clipboard operation
rushstack copied to clipboard

[rush] Npm `script-shell` Setting Not Respected by `rush`

Open stan-kondrat opened this issue 1 year ago • 2 comments

Summary

Configuring Rush to use Bash as the script shell on Windows via the .npmrc setting (script-shell=bash) does not work with rush. Despite this configuration, rush always defaults to using cmd.exe, whereas npm run correctly respects the script-shell setting.

Reproduction Steps

  1. On Windows, install Git Bash or ensure Bash is available.
  2. Add script-shell=bash to the .npmrc file in the project root.
  3. Create a script in package.json:
    "scripts": {
      "test-script": "echo $0"
    }
    
  4. Run the script using rushx:
    rushx test-script
    
  5. Run the same script using npm run:
    npm run test-script
    

Expected Result

Both rushx test-script and npm run test-script should execute using Bash and output bash.

Actual Result

  • npm run test-script correctly uses Bash and outputs bash.
  • rushx test-script uses cmd.exe and outputs $0, ignoring the script-shell setting.

Technical Details

It appears that rushx does not respect the script-shell configuration in .npmrc, always defaulting to the system shell (cmd.exe on Windows). This inconsistency with npm run may cause issues for projects relying on Unix-like shell behavior.

Suggested Solution

Ensure that rushx checks and honors the script-shell setting from .npmrc when executing scripts, aligning its behavior with npm run.

Standard Questions

Question Answer
@microsoft/rush globally installed version? Yes
rushVersion from rush.json? 5.141.2
useWorkspaces from rush.json?
Operating system? Windows 10/11
Would you consider contributing a PR? No
Node.js version (node -v)? v20.11.0

stan-kondrat avatar Jan 11 '25 11:01 stan-kondrat

Yup, Rush doesn't look at this setting. By design, Rush only looks at the common/config/rush/.npmrc file, so setting this in an individual project root wouldn't work in general. Adding support for this setting is probably not particularly difficult.

iclanton avatar Jan 13 '25 19:01 iclanton

Rush only looks at the common/config/rush/.npmrc file, so setting this in an individual project root wouldn't work in general.

You are right! I used this file, but I just didn't specify the full path to it explicitly.

stan-kondrat avatar Jan 14 '25 06:01 stan-kondrat