Javascript NodeJS:无法通过启动服务器和测试的包脚本设置PERCY_令牌

Javascript NodeJS:无法通过启动服务器和测试的包脚本设置PERCY_令牌,javascript,cypress,yarnpkg,visual-testing,percy,Javascript,Cypress,Yarnpkg,Visual Testing,Percy,据官方称,我一直在努力在本地测试运行中设置PERCY_令牌,并通过warn触发它 指导方针说: $ PERCY_TOKEN=aaabbbcccdddeeefff PERCY_BRANCH=local npm test 我现在的尝试如下所示: package.json ... “脚本”:{ “开始”:“反应脚本-r@cypress/instrument cra start”, “开始:无提示”:“浏览器=无开始”, “启动:服务器”:“启动服务器和测试启动:静默”http://localhos

据官方称,我一直在努力在本地测试运行中设置
PERCY_令牌
,并通过
warn
触发它

指导方针说:

$ PERCY_TOKEN=aaabbbcccdddeeefff PERCY_BRANCH=local npm test
我现在的尝试如下所示:

package.json


...
“脚本”:{
“开始”:“反应脚本-r@cypress/instrument cra start”,
“开始:无提示”:“浏览器=无开始”,
“启动:服务器”:“启动服务器和测试启动:静默”http://localhost:3000",
“构建”:“反应脚本构建”,
“弹出”:“反应脚本弹出”,
“envGenerateExample”:“cat.env|sed's/=.*/=/g'>.env.example”,
“jest:test”:“react scripts test--env=jest环境jsdom”,
“cy:run”:“纱线开始:服务器”。/node\u modules/.bin/cypress run”,
“cy:open”:“纱线开始:服务器”。/node_modules/.bin/cypress open”,
“cy:ci”:“纱线开始:服务器cy:chrome”,
“cy:chrome”:“cypress run——浏览器chrome——记录”,
“珀西:执行官”:“纱线珀西执行官——柏树跑”,
“cy:percy”:“纱线开始:服务器percy:exec”,
“percy:local”:“percy_-TOKEN=$(grep'percy_-TOKEN.*.env | sed's/*=/');percy_-BRANCH=local;”,
“cy:percy:local”:“纱线percy:local&&纱线开始:服务器percy:exec”
},
...
$cy:percy:local
编译成功!
现在,您可以在浏览器中查看游乐场。
本地:http://localhost:3000
在您的网络上:http://192.168.1.163:3000
请注意,开发构建没有经过优化。
要创建生产构建,请使用纱线构建。
...
> playground@0.2.0percy:exec/Users/norfeldt/Repos/player
>纱线珀西执行官——柏树跑步
警告:从1.0开始,脚本不需要“-”来转发选项。在将来的版本中,任何显式“-”都将按原样转发到脚本。
$/Users/norfeldt/Repos/playway/node_modules/.bin/percy exec-cypress-run
›警告:跳过目视测试。未提供PERCY_令牌。
...
TL;DR溶液 package.json


...
“脚本”:{
“开始”:“反应脚本-r@cypress/instrument cra start”,
“开始:无提示”:“浏览器=无开始”,
“启动:服务器”:“启动服务器和测试启动:静默”http://localhost:3000",
...
“percy:local”:“percy_-TOKEN=$(grep'percy_-TOKEN.*.env | sed's/*=/')percy_-BRANCH=本地纱线开始:服务器‘percy-exec-cypress run’”
},
...

纱线内部使用
sh
执行脚本中给出的命令(
cmd
对于windows)-。这与我们所说的非常相似

这里的
&&
由一个shell处理,因此您的命令
warn percy:local&&warn start:server percy:exec
作为两个独立的子进程运行。这意味着
warn percy:local
在一个进程中运行,并根据上下文中的需要设置环境变量,但是运行
warn start:server percy:exec
的第二个进程不知道进程1设置的环境变量

让我们看看OS X如何处理此问题:

  • 使用
    &
  • 这个什么也印不出来

  • 没有
    &&
  • 这将打印
    asdfasdf

    我认为删除
    cy:percy:local
    中的
    &&
    应该可以解决您的问题

    编辑:评论中讨论的针对您特定情况的解决方案


    如本答案第二点所述:stackoverflow.com/a/37141993/8266093我建议您以
    ENVèu KEY1=value1 ENVèu KEY2=value2命令的格式运行此脚本,在您的情况下,它将变成
    PERCY_TOKEN=$(grep'PERCYèTOKEN.*.ENV|sed's/*=/')PERCYèBRANCH=local thy PERCY exec cypress run
    。除此之外,如果单独运行start server Thread命令对您来说不是一个解决方案,那么您也可以添加该命令。

    在使用和不使用
    &&
    的情况下,它会给出相同的结果。我认为是
    启动服务器和测试
    导致了该问题。该命令也不起作用
    “cy:percy:local”:“纱线开始:服务器的纱线珀西:本地;珀西:执行官“
    我无法对
    纱线开始:服务器
    发表评论,让我们删除未知项,您能否将其作为两个单独的命令运行?在一个do中
    纱线开始:服务器
    和下一个do中
    纱线珀西:本地纱线珀西:执行
    。这在OS X中确实适用。注意:如果
    warn start:server
    是一个长期运行的进程,最好将其作为后台进程运行,或者在不同的线程/不同的终端中运行。
    sh -c 'PERCY_TOKEN=asdfasdf; PERCY_BRANCH=local' &&  sh -c 'echo $PERCY_TOKEN'
    
    sh -c 'PERCY_TOKEN=asdfasdf; PERCY_BRANCH=local echo $PERCY_TOKEN'