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

qnakjoqk  于 2022-12-21  发布在  Java
关注(0)|答案(6)|浏览(751)

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

配置Webpack的最后一步

npm run build && node ./dist/main.js

Windows Power Shell /Visual Studio代码上出现错误

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

承诺配置Webpack的教程

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

https://developerhandbook.com/webpack/how-to-configure-scss-modules-for-webpack/
vcirk6k6

vcirk6k61#

因为你是在PowerShell中,试着在CMDGit Bash中运行
或者(如果您希望继续PS):

(npm run build) -and (node ./dist/main.js)

第三种选择,分别运行,

w8f9ii69

w8f9ii692#

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

vptzau2j

vptzau2j3#

PowerShell (Core) v7+-但 * 不Windows PowerShell* -现在 * 不 * 支持&&||,即pipeline-chain operators,因此您的命令应按以下方式工作**-请参阅this answer以了解PowerShell特定的使用注意事项;有关Windows PowerShell的解决方法,请参见下文。
概念说明:

  • 在所有支持它的shell(特别是cmd.exe和POSIX兼容的shell,如Bash)中,&& * 有条件地 * 对命令进行序列化:仅当LHS命令指示 * 成功*时,它才执行其RHS命令; ||是倒数:它仅在LHS指示 * 失败 * 时才执行RHS。
  • 这对于在执行死刑毫无意义时防止执行死刑是重要的;例如,在

npm run build && node ./dist/main.js只有在构建成功 * 的情况下运行刚刚构建的内容(使用node)才有意义,这是&&所确保的。

Windows PowerShell 解决方法:
最 * 简洁*的解决方法:

npm run build; if ($?) { node ./dist/main.js }

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

最 * 可靠*的解决方法,如果命令使用2>重定向,则需要:

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

基于自动$LastExitCode变量(反映最近执行的 * 外部程序 * 的 * 进程退出代码 *)的成功测试避免了Windows PowerShell[1]中的问题,即存在 stderr 输出并通过2>对其进行重定向会错误地将$?设置为$false,即使进程退出代码为0
[1][this answer](https://stackoverflow.com/a/66726535/45375)中总结了2>重定向的问题。这些问题也困扰着7.1之前的PowerShell(核心)版本

44u64gxh

44u64gxh4#

&&操作符在linux bash中用于一个接一个地运行两个命令(同样,如果第一个命令失败,第二个命令也不会执行)
这在Windows上的PowerShell中不起作用,因此只需将这两个命令拆分并单独运行:

npm run build
node ./dist/main.js

为了完整起见,PowerShell可以在您执行(command1) -and (command2)时表现相同,而&&实际上可能会根据您的PowerShell版本而工作。
更多信息,请参见:https://stackoverflow.com/a/564092/2232127

iqxoj9l9

iqxoj9l95#

我已经通过升级powershell和通过删除空格重命名dir. path文件夹名称解决了这个问题。现在它工作正常。
Powershell升级链接
https://github.com/PowerShell/PowerShell/releases/tag/v7.2.0-preview.8

omqzjyyz

omqzjyyz6#

因为有些人可能会以与我相同的方式来到这里,想知道为什么PowerShell不允许我在if语句中的两个变量之间执行条件AND运算符。
我通过用If条件计算Left条件,然后在第一个true条件内立即计算Right条件来解决这个问题。
产生错误的示例:

$Path = "C:\\Temp\test"
$RootPath = "C:\\Temp"
$currentChildren = Get-ChildItem -Force -LiteralPath $Path 
$isEmpty = $currentChildren -eq null

if ($isEmpty && $Path -ne $RootPath) {
    Remove-Item -Force -LiteralPath $Path
    }

$foo = "question"
$bar = "answer"

我用来解决这个问题的例子:

$Path = "C:\\Temp\test"
$RootPath = "C:\\Temp"
$currentChildren = Get-ChildItem -Force -LiteralPath $Path 
$isEmpty = $currentChildren -eq null

if ($isEmpty) {
    if ($Path -ne $RootPath) {
        Remove-Item -Force -LiteralPath $Path
        }
   }

相关问题