Задний план:
Я всегда хотел создать свой собственный интерфейс командной строки, но я никогда не мог понять, как вообще начать. Наконец, однако, с небольшой помощью из статей, которые я перечислю ниже, я сделал удобный интерфейс командной строки NPM под названием html-init, который позволяет вам создать новый базовый файл HTML в рабочем каталоге командной строки по указанному пути. пользователем. Если вы не знакомы с этими терминами, это в основном означает, что вы можете запустить код
html-init path/to/file.html
в командной строке (или терминале, как бы вы это ни называли), и он создаст этот файл в любом каталоге (папке), в котором вы находитесь, с некоторым базовым начальным HTML.
В этой статье вы узнаете, как создать инструмент командной строки с такими же функциями.
Как:
Наконец-то я нашел отличный ресурс на JavaScriptPlayground.com, в котором рассказывалось, как создать базовый интерфейс командной строки NPM. Хотя это было очень полезно и, наконец, дало мне отправную точку, оно все же содержало несколько технических терминов. В оставшейся части этой статьи я постараюсь объяснить все понятно.
Сначала запустите npm init и введите информацию о пакете. Вы можете просто нажать Enter несколько раз, чтобы получить пакет по умолчанию, или вы можете заполнить поля.
Затем отредактируйте файл package.json, чтобы он выглядел следующим образом:
{
"name": "whatever-you-want-to-call-it",
"version": "1.0.0",
"description": "A simple CLI tool allowing you to create a basic HTML file",
"main": "index.js",
"keywords": [
"html"
],
"author": "Your name",
"license": "ISC",
"preferGlobal": true,
"bin": {
"html-init": "index.js"
},
"dependencies": {
"fs-extra": "^4.0.2"
},
}
preferGlobal имеет значение true, потому что он предназначен для глобальной установки (это означает, что пакет npm не просто установлен в одном репозитории, поэтому пользователь может получить к нему доступ из любого места на компьютере). Если кто-то попытается установить ваш модуль без --global тег, они получат предупреждение о том, что он предназначен для глобальной установки.
Вы также заметите, что под bin есть следующий код:
"html-init": "index.js"
Это чрезвычайноважно. Это означает, что когда пользователь запускает html-init через командную строку, запускается index.js. ЭТО БАЗОВАЯ НАСТРОЙКА для нашего инструмента командной строки. Конечно, html-init можно заменить на любое другое имя скрипта, и то же самое с index.js.
Осталось сделать только одно, чтобы ваш модуль заработал: отредактируйте файл index.js. Мой файл выглядит так:
#! /usr/bin/env node
const fse = require('fs-extra');//Require the fs-extra module for file modification
var basicHTML = `
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
</head>
<body>
</body>
</html>
`;//Set what you want your basic HTML document to look like
const file = process.cwd() + "/" + process.argv[2];
fse.outputFile(file, basicHTML)//Output file at filepath with basic HTML Content
.then(() => fse.readFile(file, 'utf8'))
.then(data => {
console.log(data) //console.log(process.argv[2] + " created with content : " + data)
})
.catch(err => {//If there's an error, log the error
console.error(err)
})
Верхняя линия, которую иногда называют «линией шебанга», просто должна быть — не беспокойтесь об этом прямо сейчас. Вы заметите, что я требую fs-extra . Это чрезвычайно полезный модуль NPM для редактирования/создания файлов.
process.argv — это массив, содержащий все аргументы командной строки, переданные в index.js. Первые 2 аргумента не имеют значения, просто посмотрите на последующие. process.argv[2] содержит параметр сразу после вызова html-init. Итак, если я наберу html-init index.html, process.argv[2] будет равно index.html.
process.cwd() получает каталог, в котором вы находитесь, в командной строке. Итак, если ваша командная строка выглядит так: C:/Users/username> (это на компьютере с Windows), то это то, что будет оцениваться process.cwd().
Остальной код довольно прост. var basicHTML устанавливается в литерал шаблона, содержащий содержимое базового HTML-файла. Не беспокойтесь, если вы не знаете, что это такое, просто относитесь к нему как к строке.
const file = process.cwd() + “/" + process.argv[2] устанавливает путь к текущему рабочему каталогу плюс путь к файлу, который указан в аргументе после html-init (или любой другой команды, которую вы выберете).
Затем мы используем fse (это то, что мне нужно, но не забудьте вызвать функцию с любым именем, которое вам нужно), чтобы вывести содержимое basicHTML в file (куда мы хотим, чтобы документ попал).
Теперь у вас есть инструмент командной строки! Имейте в виду: при выводе с помощью fs-extra он перезапишет данные файла, если этот файл существует, или создаст новый файл. Будь осторожен!
Чтобы протестировать свой инструмент, создайте новый каталог, перейдите в него и запустите html-init index.html . Затем откройте index.html в своем любимом текстовом редакторе (рекомендую Light Table), и он должен иметь базовый HTML-контент!
Следующие шаги:
Поиграйте с кодом! Помните, что вы можете передать несколько аргументов с помощью process.argv[3] или process.argv[4] и т. д.! Проявите творческий подход! Если вы хотите посмотреть на мой текущий код, вы можете найти его здесь.
Ресурсы: