You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

package.json脚本含空格路径执行失败,转义无效求助

解决package.json脚本中带空格路径被截断的问题

我之前也踩过这个一模一样的坑!当你在package.json的scripts里直接写带空格的路径时,确实会因为npm/yarn的脚本解析逻辑,导致命令在第一个空格处被截断执行失败,而且直接用反斜杠\转义空格在这里根本不起作用——这是因为JSON里的反斜杠本身是转义字符,你写的\ 会被JSON解析成普通空格,到shell执行时还是会被当作分隔符。

下面给你几个靠谱的解决方案:

  • 方案一:用转义的双引号包裹路径
    在JSON里,我们需要用\"来表示实际的双引号,把整个带空格的路径包裹起来,这样npm会把它当作一个完整的命令参数传递:

    {
      "scripts": {
        "react-native-debugger:osx": "\"/Applications/React Native Debugger.app/Contents/MacOS/React Native Debugger\""
      }
    }
    
  • 方案二:用单引号包裹路径
    如果你觉得转义双引号太麻烦,也可以用单引号直接包裹路径,大部分shell环境都能正确识别:

    {
      "scripts": {
        "react-native-debugger:osx": "'/Applications/React Native Debugger.app/Contents/MacOS/React Native Debugger'"
      }
    }
    
  • 方案三:用单独的shell脚本(适合复杂场景)
    如果后续你还需要给启动命令加更多参数或逻辑,把命令写到单独的shell脚本里会更易维护:

    1. 创建start-debugger.sh文件,内容如下:
      #!/bin/bash
      /Applications/React\ Native\ Debugger.app/Contents/MacOS/React\ Native\ Debugger
      
    2. 给脚本添加执行权限:
      chmod +x start-debugger.sh
      
    3. 在package.json里调用这个脚本:
      {
        "scripts": {
          "react-native-debugger:osx": "./start-debugger.sh"
        }
      }
      

这几个方法都能解决你的问题,我个人平时更常用第一种方案,简单直接;如果启动逻辑复杂的话就用第三种。

内容的提问来源于stack exchange,提问作者Alvaro Lorente

火山引擎 最新活动