web-dev-qa-db-fra.com

Yarn add package --build-from-source se comporte-t-il comme npm install package --build-from-source lors du passage des drapeaux node-gyp aux packages?

Il semble que yarn ne passe pas les drapeaux node-gyp aux packages natifs comme le fait npm.

Par exemple, lorsque vous essayez d'installer [email protected] avec:

npm install [email protected] \
  --build-from-source \
  --sqlite_libname=sqlcipher \
  --sqlite=`brew --prefix` \
  --verbose

nous obtenons une installation réussie de sqlite3 avec des extensions sqlcipher, en raison du passage de --sqlite_libname et --sqlite, qui sont spécifié dans binding.gyp de sqlite3.

Mais, lorsque vous essayez d'utiliser yarn et que vous exécutez ce que je pense être la commande équivalente, il semble que les indicateurs ne soient pas respectés:

yarn add [email protected] \
  --force \
  --build-from-source \
  --sqlite_libname=sqlcipher \
  --sqlite=`brew --prefix` \
  --verbose

Avec npm les arguments de ligne de commande non reconnus sont convertis en drapeaux gyp.

Avec yarn cela ne semble pas fonctionner.

Existe-t-il un moyen d'obtenir cette fonctionnalité avec yarn?

22
zealoushacker

Ceci est actuellement possible en utilisant des variables d'environnement au format npm_config_{snake_case_param}=true/false

Par exemple, npm install --build-from-source=true devient:

npm_config_build_from_source=true yarn install

C'est documenté ici https://yarnpkg.com/lang/en/docs/envvars/#toc-npm-config

4
JCM

Le fil n'expose pas automatiquement -- arguments de la commande install pour les scripts de cycle de vie (scripts pré/post/installation dans package.json des dépendances). Voici le code où Yarn construit Env pour l'exécution du script https://github.com/yarnpkg/yarn/blob/master/src/util/execute-lifecycle-script.js#L39 .

Vous pouvez passer des valeurs spécifiques via le paramètre env dans .yarnrc et également il construit npm_config_* paramètres basés sur la configuration .yarnrc/.npmrc.

2
bestander