Мы часто используем инструменты командной строки во фронтенд-разработке, такие как@babel/cli,vue-cli,create-react-appи т.п. Так как же создать инструмент командной строки npm? Это на самом деле очень просто, и это займет всего несколько шагов.
Создайте
1 Инициализируйте проект npm
npm init
package name: (cli) gogocode-cli
version: (1.0.0)
description: my-first-cli
entry point: (index.js)
keywords: npm cli
author: super man
2 Настройте поле корзины
После npm init будет сгенерирован файл package.json, в файл будет добавлено поле bin.Ключом поля bin является ваша команда (gogocode), а значение указывает на путь относительно package.json( index.js).Разные ключи соответствуют разным командам. Дополнительные сведения о поле bin см.Документация.
{
"name": "gogocode-cli",
"version": "1.0.0",
"description": "my-first-cli",
"bin": {
"gogocode": "index.js"
}
}
3 Создайте файл index.js
Создайте файл index.js в корневом каталоге проекта. Ниже приведено содержимое файла index.js: используйте функцию console.log() для вывода информации о возврате из командной строки.
#!/usr/bin/env node
console.log('Hello, world!');
Примечание. В первой строке должен быть добавлен скрипт для указания рабочей среды (узел #!/usr/bin/env).
4 упаковка выпущена
4.1 выпуск
- Выполните команду npm pulish в корневом каталоге проекта. Следуйте подсказкам системы, чтобы опубликовать инструменты командной строки наnpmjsПлатформа. В течение этого периода вам необходимо зарегистрировать учетную запись npm, вы можете самостоятельно использовать Baidu.
npm publish
- После упаковки вы можетеофициальный сайт npmjsЯ видел опубликованный вами пакет npm.
4.2 Проверка
- Установите пакеты npm глобально
npm install gogocode-cli -g
- Выполнение заказа
gogocode
- Корректно выводит «Hello, World!» 😊
Дополнительно и инструменты
Вышеупомянутое предназначено только для запуска инструмента командной строки npm от подготовки к выпуску.Если вам нужно создавать сложные приложения командной строки npm, вам нужно использовать некоторые вспомогательные пакеты разработки. Вот еще два часто используемых пакета npm:commanderа такжеterminal-kit
Commander
-
Commander используется для организации инструкций командной строки (команда) и параметров (опция) и в основном отвечает за обработку входной информации командной строки.
- Команда может быть понята как «инструкция», чтобы определить логику кода. Обычно ссылаясь на текст инструмента командной строки и текста между вторым пространством. Например: NPM init, где init - это команда. Инструмент командной строки может поддерживать несколько входов инструкций.
- опцию можно понимать как входной параметр функции «инструкция». Начните с «-» или «--», например: ls -a, где -a — параметр, означающий перечисление всех файлов. Примечание: «-» — это сокращенная форма «--».
-
Ниже приведен инструмент командной строки, который мы недавно разработали.gogocode-cliНапример, позвольте мне объяснить вам подробноcommanderкак использовать.
- Во-первых, давайте посмотрим на код входного файла index.js:
#!/usr/bin/env node
const program = require('commander');
const term = require('terminal-kit').terminal;
const pkg = require('./package.json');
//插件加载及执行逻辑
const transform = require('./transform');
//初始化插件项目逻辑
const init = require('./commands/init');
// 配置command
program
.command(`init`)
.description('初始化一个插件sample项目')
.action((options) => {
init(options);
});
// 配置options
program.option('-t, --transform <package name or path>', '插件路径或者npm包名称,支持多个插件,逗号分隔')
.option('-o, --out <path>', '输出文件路径')
.option('-s, --src <path>', '需要转换的源文件路径')
.action((options) => {
return transform(options);
});
// 配置 cli 信息,版本、cli说明等
program
.version(pkg.version)
.description(term.blue('GoGoCode 代码转换从未如此简单 https://gogocode.io'));
console.log();
// 接管命令行输入,参数处理
program.parse(process.argv);
- Из приведенного выше кода мы видим, что:gogocode-cliВнешне поддерживает определения команд (команд) и параметров (параметров) инициализации, таких как -t, -o, -s и т. д. Конкретные определения следующие:
параметр | команда | Сокращенное название | Параметр Описание | Типы |
---|---|---|---|
init | init | Инициализировать пример проекта плагина | command |
--src | -s | Путь к исходному файлу, который нужно преобразовать | option |
--transform=FILE/npm package | -t | Путь к плагину или имя пакета npm | option |
--out | -o | путь к выходному файлу | option |
- Выполним index.js:
node ./index.js
Результат выглядит следующим образом:
Мы видим, чтоcommanderАвтоматически помогает нам справиться с проблемой отображения инструкций и параметров и логического разделения, а также автоматически добавляет -V, -h две опции. Можно сказать, что это очень удобно.
terminal-kit
terminal-kitЭто мощный инструмент вывода командной строки, который поддерживает стили текста, таблицы, меню, индикаторы выполнения и другие интерактивные формы. Несколько общих функций кратко представлены ниже.
- цвет шрифта, вывод синего текста
const term = require('terminal-kit').terminal;
term.blue('GoGoCode 代码转换从未如此简单 https://gogocode.io');
- таблица вывод таблицы
const term = require('terminal-kit').terminal;
term.table([
['header #1', 'header #2', 'header #3'],
['row #1', 'a much bigger cell, a much bigger cell, a much bigger cell... ', 'cell']
], {
hasBorder: false,
contentHasMarkup: true,
textAttr: { bgColor: 'default' },
firstCellTextAttr: { bgColor: 'blue' },
firstRowTextAttr: { bgColor: 'yellow' },
firstColumnTextAttr: { bgColor: 'red' },
checkerEvenCellTextAttr: { bgColor: 'gray' },
width: 60,
fit: true // Activate all expand/shrink + wordWrap
}
);
- Да или нет Спросите
const term = require('terminal-kit').terminal;
term('Do you like gogocode? [Y|n]\n');
term.yesOrNo({ yes: ['y', 'ENTER'], no: ['n'] }, function (error, result) {
if (result) {
term.green("'Yes' detected! Good bye!\n");
process.exit();
}
else {
term.red("'No' detected, are you sure?\n");
}
});
отладка
Как отлаживать во время разработки инструмента командной строки? Мы можем это сделать.
- Переключить vscode (последняя версия) встроенный терминал (терминал) на терминал отладки JavaScript
- Используйте встроенную функцию точки останова vscode, чтобы сломать точку.
- Выполните узел ./index.js в терминале отладки JavaScript для отладки
gogocode
Опыт разработки Npm выше командной строки значительно ускоряет разработкуgogocode-cliподытожил в процессе.gogocode-cliдаgogocodeинструмент командной строки. ЭтоgogocodeЧто это такое? Цитирую официальное введение:
GoGoCode是一个操作AST的工具,可以降低使用AST的门槛,帮助开发者从繁琐的AST操作中解放出来,更专注于代码分析转换逻辑的开发。简单的替换甚至不用学习AST,而初步学习了AST节点结构(可参考AST查看器)后就可以完成更复杂的分析转换。
Официальная документация gogocode код gogo.IO/this/docs/SPE…
Можно сказать, что gogocode — это инструмент для преобразования кода, который прост в использовании и быстр в использовании.
плагин преобразования gogocode
Так как gogocode настолько прост в использовании, как мы можем использовать gogocode для написания плагинов преобразования? Позвольте мне объяснить это вам ниже:
инициализация плагина
- Сначала вам нужно установить gogocode-cli
npm install gogocode-cli -g
- Затем выполните «gogocode init», чтобы инициализировать проект плагина.
gogocode init
Структура проекта плагина
Каталог плагинов после инициализации gogocode init представляет собой стандартный проект npm. Основная запись проекта настраивается в главном узле package.json.
На приведенном выше снимке экрана видно, что запись логики преобразования проекта подключаемого модуля — это transform.js, который определяется следующим образом:
/**
* 转换入口导出一个函数,按照如下函数签名
* @param {*} fileInfo 包含 source 和 path 属性。source为待转换文本,path为路径
* @param {*} api 包含 gogocode 作为转换工具
* @param {*} options 其他 option 由此传入
* @returns {string} 返回转换后的代码
*/
module.exports = function(fileInfo, api, options) {
const sourceCode = fileInfo.source;
const $ = api.gogocode;
return $(sourceCode)
.replace('const a = $_$', 'const a = 2')
.generate();
};
Наша логика преобразования должна быть определена в функции выше
Выполнение логики преобразования
gogocode-cli выполняет файлы js
Логика преобразования может быть выполнена в виде файлов js. Ниже приведены конкретные команды:
gogocode -s ./test/input.vue -t ./transform.js -o out.vue
в,gogocode-cliОпределения параметров командной строки могут ссылаться на приведенное вышеcommanderОпределения параметров для gogocode-cli в главах.
gogocode-cli выполняет пакеты npm
Если вы хотите поделиться своими плагинами со всеми, вы можете напрямую упаковать проект в пакет npm.
gogocode-cli также поддерживает возможность запуска логики преобразования npm.
Например, мы выпустили плагин npm «vue2-to-3». Вы можете выполнить следующую команду, чтобы запустить логику преобразования в пакете npm.
gogocode -s ./test/input.vue -t ./vue2-to-3 -o out.vue
Ссылки по теме GoGoCode
Github-репозиторий GoGoCode (новый проект требует звездочки ^_^)GitHub.com/thx/gogo код…
Официальный сайт GoGoCodegogocode.io/
Вы можете прийти на детскую площадку для быстрого опытаplay.gogocode.io/
Новый инструмент от Alimama облегчает процесс пакетной модификации кодов проектов
"Практика GoGoCode" Изучите 30 советов по замене кода AST за один раз
Начните с AST по нулевой стоимости и используйте GoGoCode для решения проблемы перехода с Vue2 на Vue3.
GoGoCode помогает убрать «мусор» в коде