web-dev-qa-db-fra.com

Passer la ligne de commande - argument au script enfant dans Yarn

J'ai un package.json qui ressemble à ceci:

"scripts": {
    "dev": "cross-env BABEL_ENV=client webpack --config webpack/client.development.js && yarn dev:stub-server | cross-env BABEL_ENV=server babel-node src/server/server.js",
    "dev:stub-server": "./node_modules/.bin/robohydra ./stubs/robohydra-config.json -p 3100"
}

J'ai ajouté de la logique dans le code pour changer la façon dont le dev:stub-server est configuré en fonction d'un argument de ligne de commande. Donc, chaque fois que je lance ce qui suit, j'obtiens ce que j'attends:

yarn dev:stub-server --results=4
$ ./node_modules/.bin/robohydra ./stubs/robohydra-config.json -p 3100 -- --results=4

Comme vous pouvez le voir, les options sont transmises au script sous-jacent et tout fonctionne comme prévu.

Mon problème est que je ne peux pas avoir le --results propagé à partir du yarn dev commande à dev:stub-server dans la bonne position. Le script parent s'exécute dev:stub-server mais l'argument est transmis au script sous-jacent à la fin comme suit:

yarn dev --results=2
$ cross-env BABEL_ENV=client webpack --config webpack/client.development.js && yarn dev:stub-server | cross-env BABEL_ENV=server babel-node src/server/server.js --results=2

Existe-t-il un moyen de faire fonctionner les éléments ci-dessus comme suit?

yarn dev --results=2
$ cross-env BABEL_ENV=client webpack --config webpack/client.development.js && yarn dev:stub-server --results=2 | cross-env BABEL_ENV=server babel-node src/server/server.js

Merci d'avance!

7
Luciano M. L.

run de Yarn ne prend en charge que l'ajout de votre args à la fin de la chaîne de commande, et au moins à compter de la date 2018 -06-14, il n'y a aucun moyen de contourner cela.

Quand j'ai eu besoin de ça dans le passé, j'ai préparé mon propre dev.js script appelé par mon package.json, et a extrait args des variables d'environnement.

6
mrm

Sur mac j'utilise:

"scripts": {
  "benchmark": "sh -c 'ng run ${0}:benchmark'",
}

Que j'appelle ensuite yarn benchmark editoreditor est mon paramètre.

5
Philippe

Comme alternative, vous pouvez utiliser un *.env fichier et cat les variables qu'il contient dans votre script.

"run":"docker build -t --build-arg VAR=`cat vars.env` -f Dockerfile .

par exemple

0
Daniel Einars