npm - 如何在节点脚本中将 CMD 命令链接到 WSL
问题描述
我有一个节点服务器,我想在启动它之前启动它所依赖的一切。该包在 Windows 上运行,但依赖于 WSL 中的多容器 docker 设置。
所以我试过了
"scripts": {
"start": "wsl 'sudo service docker start && docker-compose up -d' && nodemon server.js --config nodemon.json",
},
但它抛出
> Executing task: npm run start <
> wsl 'sudo service docker start && docker-compose up -d' && nodemon server.js --config nodemon.json
zsh:1: unmatched '
The terminal process "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command npm run start" terminated with exit code: 1.
这样做的正确语法是什么?
解决方案
你确实有不匹配的引号,但我假设这只是尝试一堆不同编辑的产物;-)。
将脚本(多个命令)传递给命令的最佳方法wsl
是将其传递给sh
(或bash
如果需要)。现在只考虑 WSL 部分,那就是:
wsl -e sh -c "sudo service docker start && docker-compose up -d"
从您收到的错误消息来看,这似乎正在被解析powershell.exe
,我认为它不支持&&
链接。如果我理解正确,那只能在 PowerShell Core ( pwsh.exe
) 中使用。
这样就可以生成完整的命令(希望如此):
wsl -e sh -c "sudo service docker start && docker-compose up -d"; nodemon server.js --config nodemon.json
引用应该不会太糟糕,所以希望:
"scripts": {
"start": "wsl -e sh -c 'sudo service docker start && docker-compose up -d'; nodemon server.js --config nodemon.json",
},
当然没有直接测试,但如果它不适合你,请告诉我,我可以检查我可能做错了什么。
如果您确实需要根据先前成功的命令“链接”,那么也许考虑以下内容:
wsl -e sh -c "sudo service docker start && docker-compose up -d && powershell.exe nodemon server.js --config nodemon.json"
...这又很容易引用。但如果这不起作用(或者您最终需要在 PowerShell 中运行的多个命令),那么引用开始变得更加困难:
wsl -e sh -c "sudo service docker start && docker-compose up -d && powershell.exe -c \`"nodemon server.js --config nodemon.json\`""