Создайте каркас nodejs

DNodeJS

1. Введение

1.1

Леса, такие как vue-cli, taro-cli и т. д., с которыми мы знакомы, нужно только вводить простые командыtaro init project, вы можете быстро помочь нам создать первоначальный проект. В повседневной разработке есть вспомогательный инструмент, который можно использовать для повышения эффективности работы.

1.2 Зачем нужны леса

  • Сократите повторяющуюся работу и создайте проект и файл с нуля.
  • Динамически создавать структуры проектов, файлы конфигурации и т. д. на основе взаимодействий.
  • Совместная работа нескольких человек более удобна, и нет необходимости передавать файлы туда и обратно.

1.3 Как построить?

Как устроены леса? Я воспользовался помощьюtaro-cliидеи.

1.4 Целевая аудитория этой статьи

  • 1 Люди, которые хотят больше узнать и узнать больше
  • 2 Увлеченность технологиями

2 Подготовка перед постройкой

2.1 Сторонние инструменты

  • commander.js, который может автоматически анализировать команды и параметры для обработки команд, введенных пользователями.
  • download-git-repo, загрузите и извлеките репозиторий git для загрузки шаблонов проектов.
  • Inquirer.js, набор универсальных пользовательских интерфейсов командной строки для взаимодействия с пользователями.
  • handlebars.js, механизм шаблонов, который динамически заполняет файл информацией, отправленной пользователем.
  • ora, если процесс загрузки длительный, его можно использовать для отображения анимационного эффекта во время загрузки.
  • chalk, вы можете добавить цвет к шрифту терминала.
  • log-symbols, может отображать такие значки, как √ или × на терминале

2.2 Начало работы

2.2.1 создать новую папку, а затем инициализировать npm init

npm используется не только для управления зависимостями вашего приложения и веб-страниц, вы также можете использовать его для упаковки и распространения новых команд оболочки.

$ mkdir lq-cli
$ npm init 

В это время в нашемlq-cliВ проекте есть файл package.json, а затем нам нужно создать JS-файл, содержащий наш скрипт, и назвать его index.js. Содержимое package.json следующее

{
  "name": "lq-shell",
  "version": "1.0.0",
  "description": "脚手架搭建",
  "main": "index.js",
  "bin": {
    "lq": "./index.js"
  },
  "scripts": {
    "test": "test"
  },
  "keywords": [
    "cli"
  ],
  "author": "prune",
  "license": "ISC"
}

Содержимое index.js выглядит следующим образом.

#!/usr/bin/env node

console.log('Hello, cli!');

На этом этапе вы можете просто запустить эту команду

npm link
lq

Команда npm link может связать пакет npm в любом месте с глобальной средой выполнения, чтобы пакет npm можно было запустить напрямую с помощью командной строки в любом месте. консоль будет выводитьHello, cli!

2.2.2 Захват команд, таких как init

В предыдущем разделе вы можете запустить командную строку, но в taro-cli все еще есть некоторые команды, которые мы видели, такие как init для инициализации проекта. В настоящее времяcommanderнеобходимо использовать. Выполнение следующей команды добавит последнюю версию командующего в package.json.

npm install --save commander

Представляя командующий, мы изменим index.js следующим образом.

#!/usr/bin/env node

console.log('Hello, cli!')

const program = require('commander')
program
  .version(require('./package').version, '-v, --version')    
  .command('init <name>')
  .action((name) => {
      console.log(name)
  })
  
program.parse(process.argv)

в состоянии пройтиlq -vпроверить номер версии пройти черезlq init nameРабота, действие распечатает имя

2.2.3 Искусство для консоли

Мы видим, что в команде инициализации таро будут какие-то цветные метки, потому что вводится пакет мела, который также совпадает с командиром.

npm install --save chalk

console.log(chalk.green('инициализация создана'))

Это выведет тот же зеленый

2.2.4 Загрузка шаблона

download-git-repo поддерживает загрузку репозиториев с Github.Подробности см. в официальной документации.

npm install --save download-git-repo

Первым параметром функции download() является адрес склада, подробнее см. в официальной документации.

2.2.5 Взаимодействие с командной строкой

Функция взаимодействия с командной строкой может задавать вопросы пользователю после того, как пользователь выполнит команду инициализации, получит ввод пользователя и выполнит соответствующую обработку. Реализовано с помощью inquirer.js.

npm install --save inquirer

Файл index.js выглядит следующим образом

#!/usr/bin/env node
const chalk = require('chalk')
console.log('Hello, cli!')
console.log(chalk.green('init创建'))
const program = require('commander')
const download = require('download-git-repo')
const inquirer = require('inquirer')
program
  .version(require('./package').version, '-v, --version')    
  .command('init <name>')
  .action((name) => {
      console.log(name)
      inquirer.prompt([
        {
            type: 'input',
            name: 'author',
            message: '请输入你的名字'
        }
      ]).then((answers) => {
        console.log(answers.author)
        download('',
          name, {clone: true}, (err) => {
          console.log(err ? 'Error' : 'Success')
        })
      })
      
  })
program.parse(process.argv)

2.2.6 или отображение прогресса

npm install --save ora

Соответствующие команды могут быть следующими

const ora = require('ora')
// 开始下载
const proce = ora('正在下载模板...')
proce.start()

// 下载失败调用
proce.fail()

// 下载成功调用
proce.succeed()

2.2.6 лог-символы добавляют значки, такие как √ или ×, перед сообщением.

npm install --save log-symbols

Соответствующие команды могут быть следующими

const chalk = require('chalk')
const symbols = require('log-symbols')
console.log(symbols.success, chalk.green('SUCCESS'))
console.log(symbols.error, chalk.red('FAIL'))

2.2.7 Полный файл выглядит следующим образом

#!/usr/bin/env node
const chalk = require('chalk')
console.log('Hello, cli!')
console.log(chalk.green('init创建'))
const fs = require('fs')
const program = require('commander')
const download = require('download-git-repo')
const inquirer = require('inquirer')
const ora = require('ora')
const symbols = require('log-symbols')
const handlebars = require('handlebars')
program
  .version(require('./package').version, '-v, --version')
  .command('init <name>')
  .action(name => {
    console.log(name)
    inquirer
      .prompt([
        {
          type: 'input',
          name: 'author',
          message: '请输入你的名字'
        }
      ])
      .then(answers => {
        console.log(answers.author)
        const lqProcess = ora('正在创建...')
        lqProcess.start()
        download(
          'direct:https://github.com/Chant-Lee/rick-cli-templates1.git',
          name,
          { clone: true },
          err => {
            if (err) {
              lqProcess.fail()
              console.log(symbols.error, chalk.red(err))
            } else {
              lqProcess.succeed()
              const fileName = `${name}/package.json`
              const meta = {
                name,
                author: answers.author
              }
              if (fs.existsSync(fileName)) {
                const content = fs.readFileSync(fileName).toString()
                const result = handlebars.compile(content)(meta)
                fs.writeFileSync(fileName, result)
              }
              console.log(symbols.success, chalk.green('创建成功'))
            }
          }
        )
      })
  })
program.parse(process.argv)

Суммировать

В приведенном выше примере можно построить только простой инструмент формирования шаблонов.На самом деле, bash может делать многое, например, пакет npm элегантно обрабатывает стандартный ввод, управляет параллельными задачами, отслеживает файлы, конвейерные потоки, сжатие, ssh, git и т. д., если вы хотите знать больше, вы должны иметь глубокое понимание Это просто открыть дверь, и нет предела обучению.