【发布时间】:2021-09-15 03:39:28
【问题描述】:
我们有一个项目来简化开发,它使用 node 来处理一些依赖项以及我们的测试脚本来启动 docker 映像来运行测试。目标是开发人员无需在本地运行 bats,只需运行 npm test 即可启动映像并运行测试。
我可以通过多种方式在我的 Git Bash 中让它在本地工作 - 但是我无法通过 npm 脚本让它工作 - 这导致我现在有一两天的时间发送不同的 SO 方法来尝试解决问题。这是我正在使用的:
{
"scripts": {
"test": "bats test/**/*.bats",
"test-ci": "bats --formatter junit -T test/**/*.bats",
"test-docker": "docker run -it -v /c/source/git/devops/dotnetcore-nuget-push/:/app node:slim npm test",
"test-docker-test": "docker run -it -v $(pwd):/app -w //app node:slim npm test",
"test-docker-debug": "docker run -it -v /c/source/git/devops/dotnetcore-nuget-push:/app -w //app node:slim bash -c \"echo $(pwd) && ls\"",
"test-docker2": "docker run -it -v /c/source/git/devops/dotnetcore-nuget-push/:/app -w //app node:slim npm test",
},
}
理想情况下,我们最终将拥有test - 只需尝试一些事情以确保它们的工作方式相同。
以下是 Git Bash 本地运行的方法:
docker run -it -v /$(pwd):/app -w //app node:slim npm testdocker run -it -v /$(pwd):/$(pwd) -w /$(pwd) node:slim npm testMSYS_NO_PATHCONV=1 docker run -it -v $(pwd):$(pwd) -w $(pwd) node:slim npm test
所以我尝试将其中一些和调试脚本添加到我的 npm 脚本中,但唯一有效的是当我对卷路径 -v /c/source/git/devops/dotnetcore-nuget-push/:/app 进行硬编码时。理想情况下,这不会是硬编码的,但是当我使用 $(pwd) 时,我会收到错误,它现在找不到我的 package.json .. 这是它使用 $(pwd) 而不是硬编码路径 - 它试图查看工作目录/app 路径 - 但是 workdir 是应用程序,它应该在安装应用程序的位置寻找 package.json - 类似于我执行硬编码路径时的情况。
我查看了以下资源 - 但没有一个使用 npm
【问题讨论】:
-
您似乎正在从 Windows 运行 npm。 Windows 的默认 shell(也将是从 npm 调用时评估脚本的内容 - 无论您用于启动 npm 的 shell)是 cmd 而不是 bash,并且 cmd 不使用
$()语法。请改用%cd%。 -
@CherryDT 哇,就是这样。我做了一个巨大的假设,即从不同的 shell 运行 npm,它在该上下文和该 shell 中运行。将那段代码更新为 -v %cd% :/app 效果很好!
-
很高兴听到。将其扩展为答案。
-
是
batsthis npm package?只要您在package.json文件中的devDependencies中列出了它,npm run test应该可以正常工作,开发人员无需手动进行额外安装,也无需处理 Docker 的复杂性。