Node.js 重写npm脚本以与windows cmd兼容

Node.js 重写npm脚本以与windows cmd兼容,node.js,npm,npm-scripts,Node.js,Npm,Npm Scripts,我试图运行为linux命令行编写的教程中的脚本,但在将其转换为与windows兼容的内容时遇到错误。这是文章中的一行: "build": "cd react-spa && yarn build && cd .. && cp -R react-spa/build/ public/ && mv public/index.html public/app.html" 这就是我所拥有的 cd客户端和纱线构建和cd..&&xcopy clie

我试图运行为linux命令行编写的教程中的脚本,但在将其转换为与windows兼容的内容时遇到错误。这是文章中的一行:

"build": "cd react-spa && yarn build && cd .. && cp -R react-spa/build/ public/ && mv public/index.html public/app.html"
这就是我所拥有的

cd客户端和纱线构建和cd..&&xcopy client/build/public//E&&ren public/index.html app.html
这是我在终端收到的错误消息

参数数量无效
npm错误!代码失效循环
npm错误!错误4
npm错误!api@0.0.0build:`cd客户端和纱线构建和cd..&&xcopy client/build/public//E&&ren public/index.html app.html`
npm错误!退出状态4
npm错误!
npm错误!失败api@0.0.0构建脚本。
npm错误!这可能不是npm的问题。上面可能还有其他日志输出。
npm错误!此运行的完整日志可在以下位置找到:
npm错误!C:\Users\user\AppData\Roaming\npm cache\\u logs\2020-05-01T05\u 29\u 54\u 552Z-debug.log

我做错了什么?

在package.json中重新定义
构建脚本,如下所示:

“build”:“cd react spa和纱线构建和cd..&&xcopy/e/h/y/q \”react spa/build \“public\\”>nul 2>&1&&del \“public\\app.html\”>nul 2>&1&&ren \“public\\index.html \“app.html \”
注意:前面提到的npm脚本假定您正在运行Windows,npm脚本使用的默认shell是
cmd.exe


说明: 进行了以下更改,以匹配与原始npm
build
脚本(即使用*nix命令编写的脚本)相同的行为:

  • 以下命令:

    cp-R反应spa/build/public/
    
    已对命令进行了优化,如下所示:

    nul 2>&1
  • 选项:

    • /e
      -复制文件夹和子文件夹,包括空文件夹
    • /h
      -复制隐藏的和系统的文件和文件夹
    • /y
      -取消确认覆盖文件的提示
    • /q
      -复制时不要显示文件名
    注意事项:

    • 每个路径名都用JSON转义双引号括起来,即
      \“…\”

    • public\\
      部分有一个尾随的反斜杠(
      \
      ),它已被JSON转义(
      \\
      ),以通知
      xcopy
      目标是一个目录。这还可以确保在
      公用
      目录不存在时创建该目录

    • >nul 2>&1
      部分禁止显示复制了多少文件的确认日志

  • 以下命令:

    mv public/index.html public/app.html
    
    已改进为使用和命令,如下所示:

    del\'public\\app.html\>NUL2>&1&&ren\'public\\index.html\'app.html\'
    
    注意事项:

    • 我们首先尝试删除
      app.html
      文件,以确保后续的
      ren
      命令可以将
      index.html
      文件重命名为
      app.html
      ,而不会因为已经存在重复的文件而产生任何冲突

      我们使用
      >nul2>&1
      重定向,以确保在
      app.html
      文件找不到时,即在构建脚本的第一次运行期间找不到该文件时,防止任何日志

    • 每个路径名都用JSON转义双引号括起来,即
      \“…\”
    • public\\index.html
      部分在
      del
      ren
      命令中使用反斜杠分隔符(
      \
      ),该分隔符已被JSON转义(
      \
      )。而不是正斜杠(
      /


  • 你确定它是
    /E
    而不是
    /E
    ?如果您可以从调试日志文件
    C:\Users\user\AppData\Roaming\npm cache\\u logs\2020-05-01T05\u 29\u 54\u 552Z-debug.log
    中显示日志,也会很有帮助。