Dans cet article, un aperçu du package MRI est fourni avec un exemple d'utilisation tiré du code source de Changesets.
Vous pouvez utiliser le package MRI pour rechercher rapidement des indicateurs et des arguments. C'est une alternative à yargs-parser.
npm install - save mri
// 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.
L'IRM est importée dans le package CLI Changesets
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);
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()
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.
https://www.npmjs.com/package/mri
https://github.com/changesets/changesets/blob/main/packages/cli/src/index.ts#L1C18-L1C21
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!