Knoten entwickelt npm-Scaffolding (ähnlich vue-cli)

Knoten entwickelt npm-Scaffolding (ähnlich vue-cli)

npm install tengyu-cli -g

Der Quellcode wurde in die Code Cloud hochgeladen: https://gitee.com/bingtengaoyu/tengyu_cli.git

1. Ideen für den Gerüstbau

  1. Der Zweck des Gerüstbaus

    Um Projekte schnell zu erstellen und Konfigurationsinformationen zu ändern, um den Zweck des automatisierten Front-End-Engineerings zu erreichen

  2. Ideen: zwei Wege

    Die erste Methode: Ziehen Sie den Code von GitHub, ändern Sie die Konfiguration, Sie müssen eine herunterladbare Vorlage auf GitHub bereitstellen, schließen Sie die Initialisierung ab, entpacken Sie das Zip-Paket nach dem Herunterladen, löschen Sie dann das Zip-Paket, ändern Sie die Konfigurationsdatei, konfigurieren Sie den Proxy, Abhängigkeiten herunterladen und Projekt starten;

     

    Die zweite Methode: Legen Sie die komprimierte Zip-Vorlage auf dem Server ab, das Gerüst lädt die entsprechende Vorlage vom Server herunter, geben Sie die Konfigurationsinformationen gemäß der Eingabeaufforderung ein, schließen Sie die Initialisierung ab, dekomprimieren Sie das Zip-Paket nach dem Herunterladen, löschen Sie dann das Zip-Paket, ändern die Konfigurationsdatei und den Proxy konfigurieren, Abhängigkeiten herunterladen, das Projekt starten

2. Initialisieren Sie das Projekt

npm-Init

3. Ändern Sie die Eintragsdatei package.json

{
  "name": "tengyu-cli",
  "Version": "1.0.0",
  "Beschreibung": "",
  "main": "index.js", // Eintragsdatei
  "Behälter": {
    "tengyu": "index.js"
  },
  "Skripte": {
    "serve": "Knotenindex.js",
    "dev": "Knotenindex.js",
    "start": "Knotenindex.js",
    "test": "echo \"Fehler: kein Test angegeben\" && Ausgang 1"
  },
  "Autor": "gengbingbing",
  "Lizenz": "ISC",
  "Abhängigkeiten": {
    "Kreide": "^3.0.0",
    "Kommandant": "^4.1.1",
    "cross-spawn": "^7.0.1",
    "download-git-repo": "^3.0.2",
    "Lenker": "^4.7.3",
    "Anfragender": "^7.0.4",
    "Log-Symbole": "^3.0.0",
    "ora": "^4.0.3",
    "Anfrage": "^2.88.2"
  }
}

4. Abhängigkeiten herunterladen

npm installieren

5. Beginnen Sie mit dem Scaffolding (laden Sie den Quellcode direkt hoch)

index.js

#!/usr/bin/env-Knoten
const program = require('commander'); //Befehlszeile entwerfen
const download = require('download-git-repo'); //github Warehouse Download
const inquirer = require('inquirer'); // Befehlszeilenabfrage
const handlebars = require('handlebars'); //Zeichen ändern
const ora = require('ora'); //Status-Flag in der Kommandozeile laden
const chalk = require('chalk'); //Zeichenfarbe der Befehlszeilenausgabe
const logSymbols = require('log-symbols'); // Ausgabesymbole für die Befehlszeile
const fs = require('fs');
const Anfrage = require('request');
const {resolution} = require("path");
const install = require(./utils/install");
console.log(chalk.green(`
                           tengyu cli-Befehle
    -------------------------------------------------- ----------
       tengyu init <Vorlagenname> Projektname | Initialisiert das Projekt
       tengyu -V | Versionsnummer anzeigen    
       tengyu -h | Hilfe anzeigen      
       Tengyu-Liste | Vorlagenliste anzeigen  
       tengyu herunterladen | ZIP-Vorlage herunterladen  
    -------------------------------------------------- ----------
`));
// Verfügbare Vorlagen
const-Vorlagen = {
    'react-npm-template': {
        URL: 'https://gitee.com/bingtengaoyu/reactAntd',
        downloadUrl: 'https://gitee.com:bingtengaoyu/reactAntd#master',
        Beschreibung: 'Basisvorlage reagieren'
    },
    'vue-tools': {
        URL: 'https://gitee.com/bingtengaoyu/vueTools',
        downloadUrl: 'https://gitee.com:bingtengaoyu/vueTools#master',
        Beschreibung: 'vue gemeinsame Komponenten'
    }
}
// tengyu -V|--Version
program.version('1.0.0'); // Versionsnummer 0.1.0 ausgeben, wenn -v|--version
// tengyu init <Vorlage> <Projekt>
Programm
    .command('init <Vorlage> <Projekt>')
    .description('Projektvorlage initialisieren')
    .action((Vorlagenname, Projektname) => {
        console.log (Vorlagenname, Vorlagen);
        let downloadUrl = templates[templateName].downloadUrl;
        // Laden Sie das Github-Projekt herunter, laden Sie die Aufforderung zum Laden der Wand herunter
        const spinner = ora('Vorlage wird heruntergeladen...').start();
        //Der erste Parameter ist die Github-Warehouse-Adresse, der zweite Parameter ist der Name des erstellten Projektverzeichnisses und der dritte Parameter ist clone
        download(downloadUrl, projectName, { clone: ​​true }, err => {
            wenn (fehler) {
                console.log(logSymbols.error, chalk.red('Der Download der Projektvorlage ist fehlgeschlagen\n Nur die Vorlagen in der Liste können heruntergeladen werden'));
                Konsole.log (err);
            } anders {
                spinner.succeed('Projektvorlage erfolgreich heruntergeladen');
                // Antwort auf der Kommandozeile
                inquirer.prompt([
                    {
                        Typ: 'Eingabe',
                        Name: 'appid',
                        Nachricht: 'Bitte appid eingeben',
                        Standard: ''
                    },
                    {
                        Typ: 'Eingabe',
                        Name Name',
                        Nachricht: 'Bitte geben Sie einen Projektnamen ein',
                        Standard: Projektname
                    },
                    {
                        Typ: 'Eingabe',
                        Name: 'Beschreibung',
                        Nachricht: 'Bitte geben Sie ein Projektprofil ein',
                        Standard: ''
                    },
                    {
                        Typ: 'Eingabe',
                        Name: 'Autor',
                        Nachricht: 'Bitte geben Sie den Namen des Autors ein',
                        Standard: ''
                    }
                ]).then(Antworten => {
                    //Ändern Sie die Datei „package.json“ gemäß den Ergebnissen der Befehlszeilenabfrage
                    let packsgeContent = fs.readFileSync(`${projectName}/package.json`, 'utf8');
                    let packageResult = handlebars.compile(packsgeContent)(answers);
                    fs.writeFileSync(`${projectName}/package.json`, packageResult);
                    console.log (Paketergebnis)
                    fs.writeFileSync(`${projectName}/config.js`, `module.exports = ${JSON.stringify(answers)}`);
                    console.log(logSymbols.success, chalk.green('Das Projekt wurde erfolgreich initialisiert, Download der Abhängigkeiten starten...'));
                    install({ cwd: `${resolve('./')}/${projectName}` }).then(data => {
                        console.log(logSymbols.success, chalk.green('Projektabhängigkeiten erfolgreich heruntergeladen!'));
                    });
                    // Verwenden Sie Kreide und Log-Symbole, um den Stil der Befehlszeilenausgabe zu ändern
                })
            }
        })
    })
// Laden Sie die Zip-Vorlage herunter
Programm
    .command('herunterladen')
    .description('Projektvorlage initialisieren')
    .action((Vorlagenname, Projektname) => {
        inquirer.prompt([
            {
                Typ: 'Eingabe',
                name: 'projekt_name',
                Nachricht: 'Bitte geben Sie einen Projektnamen ein',
                Standard: 'tengyu-template'
            },
            {
                Typ: 'Liste',
                name: 'Vorlagenname',
                Nachricht: 'Bitte wählen Sie eine Vorlage zum Herunterladen aus',
                Auswahlmöglichkeiten: [
                    'schnelle Entwicklungsvorlage reagieren',
                    'vue-toolset'
                ],
                Standard: 'react-npm-template'
            }
        ]).then(Antworten => {
            let url = ''
            Schalter (answers.template_name) {
                case 'react rapid development template':
                    url = templates['react-npm-template'].url;
                    brechen;
                case 'vue-toolset':
                    url = templates['vue-tools'].url;
                    brechen;
                Standard:
                    url = templates['react-npm-template'].url
            }
            Funktion downloadFile(uri, fileName, callback) {
                var stream = fs.createWriteStream (Dateiname);
                request(uri).pipe(stream).on('close', callback);
            }
            downloadFile(url, `${answers.project_name}.zip`, function () {
                console.log(logSymbols.success, chalk.green(`${answers.template_name} heruntergeladen!`));
                zurückkehren
            });
        })
    })
// Tengyu-Liste
Programm
    .command('Liste')
    .description('Alle verfügbaren Vorlagen anzeigen')
    .action(() => {
        console.log(chalk.green(`
                              Vorlage
            ----------------------------------
                 React-npm-template Reaktionsschnelle Entwicklungsvorlage  
                 vue-tools Vue-Tool-Sammlung
            ----------------------------------
        `))
    })
program.parse(process.argv);

util-install.js-Datei (zum Herunterladen von Abhängigkeiten)

Verwenden Sie das Cross-Spawn-Modul, um benutzerdefinierte cmd-Befehle zu schreiben

const spawn = require("cross-spawn");
module.exports = Funktion install(Optionen) {
    const cwd = options.cwd || process.cwd();
    return new Promise((auflösen, ablehnen) => {
        const command = options.isYarn ? "Garn" : "npm";
        const args = ["install", "--save", "--save-exact", "--loglevel", "error"];
        const child = spawn(command, args, { cwd, stdio: ["pipe", process.stdout, process.stderr] });
        child.once("Schließen", Code => {
            wenn (Code !== 0) {
                ablehnen({
                    Befehl: `${Befehl} ${args.join(" ")}`
                });
                zurückkehren;
            }
            beschließen();
        });
        child.once("Fehler", ablehnen);
    });
};

Bisher wurde ein einfaches Gerüst entwickelt

Nach dem npm-Link können Sie lokal testen

6. Veröffentlichen Sie die npm-Bibliothek

  1. Richten Sie Ihren eigenen npm-Agenten ein, legen Sie ihn nicht als Taobao-Agenten fest usw.;

  2. Gehen Sie zu npm, um Ihr eigenes Konto zu registrieren;

  3. Laden Sie Ihr eigenes npm-Gerüst hoch

    npm-Anmeldung // anmelden
    npm publish // Pushen Sie Ihr eigenes Gerüst in die npm-Bibliothek
  4. Sie sind fertig, Sie können Ihr eigenes npm-Plugin herunterladen.

Supongo que te gusta

Origin blog.csdn.net/qq_23334071/article/details/105158728
Recomendado
Clasificación