задний план
Инструменты командной строки нам хорошо знакомы, а некоторые операции командной строки значительно упрощают нашу повседневную работу. Эта статья основана на счетчике кода командной строки Node, который я написал.
Я считаю, что те, кто знаком с системой linux, должны полюбить использовать некоторые команды, такие как ps, grep, cp, mv и т. д. Это также мое первоначальное намерение разработать удобную командную строку, а второе — записать всю процесс полной маленькой игрушки с открытым исходным кодом.
Возможности командной строки:
- Простота в эксплуатации
- Сильная видимость
Я взглянул на некоторые из текущих командных строк и столкнулся со следующими проблемами.
- Несколько видовGitHub.com/to WTO за 10/Li…
- Не достаточно хорошGitHub.com/AL Дания/Кроме…
- Статистика неудобнаяGitHub.com/Райан Фаулер/…
Поэтому родился этот ценный и удобный статистический инструмент.
Высокий цвет
исходный код игрушки
Подготовить
сторонняя библиотека
- cli-table
- colors
- commander
- ignore
библиотека разработки (для тестирования)
- chai
- mocha
- codecov
- istanbu
Совместимость узлов
- babel
статические файлы
- Библиотека сопоставления языков
- библиотека цветов
идеи
Получить пользовательскую конфигурацию пользователя через командующий
program
.version('0.1.0')
.option('-i, --ignore [dir]', 'ignore dir')
.option('-p, --path [dir]', 'ignore dir')
.parse(process.argv);
Узел обхода файла, информация о количестве строк на каждом языке
function getFile(dirPath) {
const files = fs.readdirSync(dirPath);
files.forEach((item) => {
...
})
}
игнорировать вывод фильтра в кеш
function handleIgnode(cPath) {
try {
const currentPath = path.join(ROOTPATH, '.gitignore');
const fileData = fs.readFileSync(currentPath, 'utf-8');
const ignoreList = fileData.split('\n');
const filterList = filterData(ignoreList);
const ig = ignore().add(filterList);
return ig.ignores(cPath);
} catch (e) {
return false;
}
}
Пройдите кеш, подсчитайте максимальную строку и выполните цвета
function hanldeTable(){
...
if (maxCount < langInfo[item].totalLines) {
maxCount = langInfo[item].totalLines;
maxIndex = index;
}
...
}
отображение вывода cli-таблицы
function outputTbale() {
const {
header,
content,
bottom
} = initTable();
const {
totalFiles,
totalCode,
totalBlank,
tablesContent
} = hanldeTable();
...
console.log(`T=${totalTime} s`, `(${fileSpeed} files/s`, `${lineSpeed} lines/s)`)
console.log(header.toString())
console.log(content.toString())
console.log(bottom.toString())
}
Улучшать
loading
Для многофайловых каталогов предусмотреть загрузку
lass StreamLoad {
constructor(option) {
this.stream = option.stream;
this.text = option.text;
this.clearLine = 0;
}
setValue(value) {
this.text = value;
this.render();
}
render() {
this.clear();
this.clearLine++;
this.stream.write(`read ${this.text} file\n`);
}
clear() {
if(!this.stream.isTTY) {
return this;
}
for (let i = 0; i < this.clearLine; i++) {
this.stream.moveCursor(0, -1);
this.stream.clearLine();
this.stream.cursorTo(0);
}
this.clearLine = 0;
}
}
const progress = new StreamLoad({
stream: process.stderr,
text: 0
})
Создал класс, реализующий загрузку. В основном используется в методе обработки в readline, см. подробностиузел будет .org/day3/latest…
babel
Совместимость с более ранними версиями узла
cnpm i babel-cli
package.json
"build": "./node_modules/.bin/babel src --out-dir lib"
прецедент
Демонтировать
Используется для проверки правильности обхода файла.
const path = require('path');
const assert = require('chai').assert;
const {getFileData} = require('../src/linec');
describe('linec files test', () => {
it('can linec dir', () => {
const url = path.join(__dirname, '../example');
console.log(url);
const dirObj = JSON.stringify(getFileData(url));
const expectData = '{"CSS":{"file":1,"blankLines":0,"totalLines":4,"color":"#563d7c"},"JavaScript":{"file":1,"blankLines":0,"totalLines":1,"color":"#f1e05a"},"JSON":{"file":1,"blankLines":0,"totalLines":3,"color":"#fff"},"Markdown":{"file":1,"blankLines":0,"totalLines":1,"color":"#fff"}}';
assert.equal(dirObj, expectData);
})
})
бегать
./node_modules/mocha/bin/mocha
В этот проект также были добавлены тесты на покрытие кода, поэтому он выглядит так
"test": "./node_modules/.bin/istanbul cover node_modules/mocha/bin/_mocha && ./node_modules/.bin/codecov",
выпускать
Step1
Открытьwww.npmjs.com/signup
зарегистрировать аккаунт
step2
Если у вас есть учетная запись, перейдите непосредственно к этому шагу
npm login
step3
Введите версию в package.json
{
"name": "linec",
"version": "1.2.4",
"description": "line count",
"main": "index.js",
...
}
step4
npm publish
Совет: обратите внимание, что вам нужно изменить версию в package.json для каждого выпуска, иначе выпуск не будет выполнен.
Командная строка
package.json
"bin": {
"linec": "./lib/index.js"
},
локальная командная строка проекта
npm link
Вы можете использовать команду linec для мягкого подключения команды linec к локальной сети, а имя linec можно настроить.
удаленная командная строка
По умолчанию используется имя пакета, но если имя определено в bin, как указано выше, имя можно изменить. То есть имя пакета может не совпадать с командой, но для более удобного использования рекомендуется унифицировать имя пакета и команду.
Для получения подробной информации см.Уууу. Руан Ифэн.com/blog/2015/0…
Непрерывное интеграционное тестирование и автоматическое покрытие покрытия
настроить.travis.yml
language: node_js
node_js:
- "stable"
sudo: false
before_script:
- npm install
Это моя конфигурация.Каждый раз, когда вы отправляете, если он содержит команду npm run test, travis автоматически вызывает и обнаруживает ее автоматически.
Преимущество Travis также в том, что он автоматически запускает тестовые примеры, когда кто-то отправляет вам pr, избегая некоторых низкоуровневых ошибок. Ниже приведена диаграмма эффектов.
Это инструмент для статистического покрытия кода, добавьте его в npm run test и вы сможете увидеть статистику покрытия в pr
Установить и использовать
$ npm install -g linec / cnpm install -g linec
Основное использование
$ linec
экспортировать в html
$ linec -o
После запуска в текущем каталоге появится файл output.html.
Функция
- Вывод пустых строк, фактических строк, общих строк
- Поддерживается более 400 языков
- Показать скорость перемещения
- Отображение нескольких цветов
- Поддержка экспорта html
Исходный код инструмента (приветствуется пометкой)GitHub.com/flower1995116/…
визуализация
Основной режим
Открыть после экспорта HTML
конец
Вышеизложенное является полным содержанием. Возможно, я все еще нахожусь на начальной стадии разработки инструментов Node. Есть более стандартизированные операции. Я приветствую исправления от больших парней.