如果我从PS运行pub serve
,它会正确地开始侦听8080
,我可以从浏览器进行连接。
PS M:\Coding\Games\dart_games> pub serve
Loading source assets... (0.2s)
Serving dart_games web on http://localhost:8080
Build completed successfully
但是,如果我尝试将其作为Job
运行,它似乎无法运作:
PS M:\Coding\Games\dart_games> Start-Job { pub serve }
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
4 Job4 BackgroundJob Running True localhost pub serve
PS M:\Coding\Games\dart_games> iwr http://localhost:8080/
iwr : Unable to connect to the remote server
At line:1 char:1
+ iwr http://localhost:8080/
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation:
(System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest],
WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,
Microsoft.PowerShell.Commands.InvokeWebRequestCommand
答案 0 :(得分:3)
使用-ArgumentList
参数传递所需目录:
Start-Job {param($path) cd $path; pub serve } -Arg $pwd
请记住,作业是在新的PowerShell流程中执行的,因此当前流程中的变量不会自动显示在那里,而像$ pwd这样的内置函数可能会设置不同。 -ArgumentList
允许您传输工作流程所需的任何值。
答案 1 :(得分:1)
我设法使用Get-Job 4 | Receive-Job
获取输出。它说没有找到pubspec.yaml
。这意味着它正在错误的文件夹中运行!
我设法通过传递当前文件夹使其工作;虽然它有点笨拙。我找不到更好的方法:(
Start-Job -InputObject $pwd { CD $input; pub serve }
我将它们稍微包起来使其更容易使用(使用pubstart
和pubstop
)
Function Start-Pub
{
Start-Job { param($path) cd $path; pub serve } -Arg $pwd
& "M:\Apps\Dart\Dartium\chrome.exe" --user-data-dir="M:\Apps\Dart\DartiumProfile" "http://localhost:8080/"
}
Function Stop-Pub
{
Get-Job -State Running | ? Location -eq localhost | ? Command -like "*pub serve*" | Stop-Job
}
Set-Alias pubstart Start-Pub
Set-Alias pubstop Stop-Pub
这不是万无一失的(当你拨打pubstop
时会停止所有的酒吧),但还不错!