Maison >interface Web >js tutoriel >Rechercher les indicateurs et arguments CLI à l'aide du package MRI

Rechercher les indicateurs et arguments CLI à l'aide du package MRI

Linda Hamilton
Linda Hamiltonoriginal
2024-11-16 11:19:031069parcourir

Dans cet article, un aperçu du package MRI est fourni avec un exemple d'utilisation tiré du code source de Changesets.

Forfait IRM :

Vous pouvez utiliser le package MRI pour rechercher rapidement des indicateurs et des arguments. C'est une alternative à yargs-parser.

Installer

npm install - save mri

Utilisation

// Example CLI with options 
$ demo-cli - foo - bar=baz -mtv - hello world

Le code suivant est extrait de la documentation du package MRI npm.

const mri = require('mri');
const argv = process.argv.slice(2);
mri(argv);
//=> { _: ['hello', 'world'], foo:true, bar:'baz', m:true, t:true, v:true }
mri(argv, { boolean:['bar'] });
//=> { _: ['baz', 'hello', 'world'], foo:true, bar:true, m:true, t:true, v:true }
mri(argv, {
 alias: {
 b: 'bar',
 foo: ['f', 'fuz']
 }
});
//=> { _: ['hello', 'world'], foo:true, f:true, fuz:true, b:'baz', bar:'baz', m:true, t:true, v:true }

En savoir plus sur les options :

  • Alias

  • Booléen

  • Par défaut

En substance, nous convertissons les arguments CLI en un objet. Maintenant que nous comprenons les bases de l'IRM, il est temps d'examiner son utilisation dans les Changesets.

Utilisation de l'IRM dans les ensembles de modifications :

L'IRM est importée dans le package CLI Changesets

Scan for CLI flags and arguments using MRI package

Lorsque vous ajoutez un ensemble de modifications à l'aide de la commande npx changeset add ou npx changeset, ceux-ci sont accessibles dans le package CLI comme indiqué ci-dessous.

const args = process.argv.slice(2);

Analyse des arguments CLI dans l'ensemble de modifications

Le code ci-dessous montre comment l'IRM est utilisé dans le package CLI Changeset

const parsed = mri(args, {
 boolean: ["sinceMaster", "verbose", "empty", "open", "gitTag", "snapshot"],
 string: [
 "output",
 "otp",
 "since",
 "ignore",
 "tag",
 "snapshot",
 "snapshotPrereleaseTemplate",
 ],
 alias: {
 // Short flags
 v: "verbose",
 o: "output",
 // Support kebab-case flags
 "since-master": "sinceMaster",
 "git-tag": "gitTag",
 "snapshot-prerelease-template": "snapshotPrereleaseTemplate",
 // Deprecated flags
 "update-changelog": "updateChangelog",
 "is-public": "isPublic",
 "skip-c-i": "skipCI",
 },
 default: {
 gitTag: true,
 },
});

la valeur analysée ressemblera à ci-dessous, je l'ai déduit sur la base de la documentation :

{
 // string value (if you have used 'add' in npx changeset add)
 ['add'],
// boolean values
 "sinceMaster": true, 
 "verbose": true, 
 "empty": true, 
 "open": true, 
 "gitTag": true, 
 "snapshot": true
// string values
 // Note: if you have passed these options in your CLI, these keys will be parsed as string, no matter the what you pass in
 // example: if you pass in - otp=123, 123 here, even though is a number, gets parsed as string since otp is configured to be parsed as
 // string in the above code
 "output",
 "otp",
 "since",
 "ignore",
 "tag",
 "snapshot",
 "snapshotPrereleaseTemplate",
// The alias option in mri allows you to define alternative names (aliases) for CLI arguments.
 // This is particularly useful for supporting:
// Short flags: Such as -v for - verbose.
 // Kebab-case flags: Allowing flags like - since-master to map to camelCase variables in JavaScript (e.g., sinceMaster).
 // Deprecated flags: If you want to support older names for backward compatibility but still map them to the current property names.
}

La variable analysée est utilisée dans une fonction nommée run importée de /run.ts

// run function call
run(parsed._, parsed, cwd).catch((err)

Le premier paramètre est pared._ car dans la documentation, il est prévu que les commandes analysées comme 'add' ressemblent à { _: ['add']>

// run function definition
export async function run(
 input: string[],
 flags: { [name: string]: any },
 cwd: string
) {

parsed contient un objet analysé par mri basé sur les arguments CLI et l'ensemble de configuration pour les booléens, les chaînes, les valeurs par défaut et les alias.

cwd est un répertoire de travail actuel, vous pouvez l'obtenir avec process.cwd()

À propos de nous :

Chez Thinkthroo, nous étudions les grands projets open source et fournissons des guides architecturaux. Nous avons développé des composants réutilisables, construits avec tailwind, que vous pouvez utiliser dans votre projet. Nous proposons des services de développement Next.js, React et Node.

Prenez rendez-vous avec nous pour discuter de votre projet.

Scan for CLI flags and arguments using MRI package

Références :

  1. https://www.npmjs.com/package/mri

  2. https://github.com/changesets/changesets/blob/main/packages/cli/src/index.ts#L1C18-L1C21

  3. https://github.com/changesets/changesets/blob/main/packages/cli/src/index.ts#L9

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn