标记“&&”在此版本中不是有效的语句分隔符

pyt*_*dha 19 javascript powershell reactjs webpack

在我的 React 项目上安装Webpack的过程中,遇到以下问题阻碍了我的进度:

配置 Webpack 的最后一步

npm run build && node ./dist/main.js
Run Code Online (Sandbox Code Playgroud)

Windows Power Shell / Visual Studio Code 上的错误

PS C:\Users\pythonbuddha\Desktop\to_experiment\to-do-list> npm run build && node ./dist/main.js
At line:1 char:15
+ npm run build && node ./dist/main.js
+               ~~
The token '&&' is not a valid statement separator in this version.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : InvalidEndOfLine

Run Code Online (Sandbox Code Playgroud)

承诺配置 webpack 的教程

https://developerhandbook.com/webpack/webpack-4-from-absolute-scratch/

https://developerhandbook.com/webpack/how-to-configure-scss-modules-for-webpack/
Run Code Online (Sandbox Code Playgroud)

小智 65

我发现在 PowerShell 中作为我的终端VS Code,将&&命令中的替换为 就;可以了。

  • `;` 是 PowerShell 中的语句分隔符,导致命令无条件排序,类似于 `cmd.exe` 中的 `&` - 这与 `&&` 不同,后者仅在 LHS 命令成功时执行 RHS 命令_ 。 (24认同)
  • @LeoLanese,如果您在执行链中没有遇到任何错误,它就“有效”,OP所指的是“条件执行”,“&&”通常用于命令链,只有在前一个成功时才能继续执行,这是在写限制位置工作的一个不好的实践示例,`md "C:\Program Files\test"; cd "C:\Program Files\test"; git init`,它将在您当前的目录上使用`git init`,这可能会更糟...@mklement0 的答案是最合适的,当我们使用普通 Windows 10 的 PS 时,它仍然是一个有效的问题/解决方法 (3认同)

Tib*_*. M 22

这是因为您在 PowerShell 中,请尝试在CMDGit Bash

或者(如果你想在 PS 中继续):

(npm run build) -and (node ./dist/main.js)
Run Code Online (Sandbox Code Playgroud)

第三种选择,单独运行它们,

  • 关于 Windows PowerShell 中需要不同命令的观点很好(尽管在 PowerShell (Core) 7+ 中不再需要),但需要注意的是,PowerShell 的“-and”和“-or”运算符并不能替代“&&”和`||` - 它们的功能从根本上不同,有效地丢弃标准输出输出并返回单个布尔值 - 请参阅[此答案](/sf/answers/2927143901/)的底部部分。 (7认同)
  • 我认为提到“-and”替代方案有点误导,因为我怀疑人们通常会想要“-and”所做的事情(我当然不希望那样,只有在我的命令运行时才意识到这一点)。答案应该只是提到,要在 Powershell 中实现相同的功能,请使用 PowerShell 版本 7+。 (2认同)

Jen*_*nsV 7

&&运算符在 linux 中用于依次bash运行这两个命令。(另外,如果第一个命令失败,第二个将不会被执行)

这在 Windows 上的 PowerShell 中不起作用,因此只需拆分两个命令并单独运行它们:

npm run build
node ./dist/main.js
Run Code Online (Sandbox Code Playgroud)

为完整起见,Powershell 的行为与您执行时的行为相同,(command1) -and (command2)并且&&可能实际工作取决于您的 PowerShell 版本。

请参阅此了解更多信息:https : //stackoverflow.com/a/564092/2232127


mkl*_*nt0 7

PowerShell的(核心)V7 + -而不是 Windows PowerShell中-现在支持&&||,该管道链运营商,所以你的命令应该上班,在那里

&&执行它的RHS只有在LHS表示成功,类似于如何&&在POSIX兼容的外壳如作品bash并在cmd.exeWindows上。

Windows PowerShell解决方法:

最简洁的解决方法:

npm run build; if ($?) { node ./dist/main.js }
Run Code Online (Sandbox Code Playgroud)

这建立在自动$?变量上,它是一个布尔值,指示最近的命令是否成功。

最强大的解决方案,需要如果命令使用2>重定向

npm run build; if ($LASTEXITCODE -eq 0) { node ./dist/main.js }
Run Code Online (Sandbox Code Playgroud)

基础的成功测试的自动$LastExitCode变量,这反映了进程退出代码最近执行的外部程序,避免了在Windows PowerShell中的问题[1] ,其中的存在stderr的输出结合经由重定向它2>错误地套$?$false即使当处理退出代码是0.


[1]这个答案2>总结了重定向的问题。他们也仍然困扰PowerShell的(核心)为7.1版本,但预览V7.2版本现在有一个实验性的功能PSNotApplyErrorActionToStderr,纠正他们。


归档时间:

查看次数:

16146 次

最近记录:

4 年,3 月 前