недавно написанныйnode
Когда я столкнулся с требованием, мне нужно было очистить изображения в определенном каталоге более 3 дней.npm
Я нашел пакет для непосредственного использования, но не смог найти подходящий, поэтому сделал его сам.
В этой статье в основном описывается, как разработать полную и надежную систему с нуля.npm
Пакет в основном включает в себя настройку некоторых инструментов, и функция пакета не в центре внимания.
1. Настроить эслинт
ESLintЭто инструмент определения стиля кода, например, использовать ли пробелы или табуляции, добавлять ли точки с запятой, использовать ли верблюжий регистр или подчеркивание и так далее. Это гарантирует, что стиль кода команды будет последовательным.
npm install eslint -g
eslint init
согласно сeslint
Предоставленные варианты комбинируются с вашими потребностями.После выбора всего пути в корневом каталоге будет создан новый..eslintrc.json
файл, который содержит ряд конфигураций правил. В это время вы напишете код. Если он не соответствует спецификациям, редактор сообщит об ошибке. Если некоторые каталоги не хотят использовать проверку, вы можете создать.eslintignore
, поместите в него каталог, не требующий проверки. Для облегчения проверки мыpackage.json
настроить егоscripts
:
"scripts": {
"lint": "eslint --fix src"
}
Вы можете сотрудничать с github, чтобы принудительно проверять код каждый раз, когда вы отправляете:Используйте git hook для проверки eslint
2. Напишите код
Мы пишем наш код в каталоге src и разбиваем его на определенные шаги следующим образом.
- Читать все файлы в каталоге
- Отфильтруйте файлы, которые нам нужно обработать, такие как изображения или журналы, которые были созданы или изменены более 3 дней.
- удалить эти файлы
Разделим на 3 функции:
// readAllFileInfo.js
// 使用fs.readdir读取目录下所有文件
fs.readdir(filePath, function(err, files) {
if (err) {
reject(err);
} else {
Promise.all(files.map(file => {
return filterFile(file, options);
}))
.then(deleteFiles => {
resolve(deleteFiles.filter(deleteFile => deleteFile));
});
}
});
// filterFile.js
// 使用fs.stat读取文件信息,然后筛选出需要删除的文件
fs.stat(fileName, (err, stats) => {
if (err) {
reject(err);
} else {
const time = stats[expiredType];
const distanceTime = formatDate(date);
const extName = path.extname(fileName);
if (now - time > distanceTime && extName === `.${ext}`) {
deleteFile(fileName)
.then((res) => {
resolve(res);
});
} else {
resolve();
}
}
});
// deleteFile.js
// 使用fs.unlink删除文件
fs.unlink(fileName, err => {
if (err) {
reject(err);
} else {
resolve(fileName);
}
});
Здесь мы в основном говорим об идее решения проблемы.Сначала нам нужно разобраться в шагах, необходимых для решения этой задачи.Затем каждый шаг можно абстрагировать в функцию.Подумайте о параметрах и возвращаемых значениях Наконец, мы можем разработать более легко расширяемую функцию.API
, конкретный код можно посмотреть на складе: https://github.com/wulv/del-expired-file.
3. Используйте вавилон
в более низкой версииnode
может не поддерживать некоторыеes6
синтаксис, такой как деструктуризация объектов и т. д., поэтому вам нужно использоватьbabel
Скомпилируйте с синтаксисом, который также распознается более ранними версиями. мы кладемsrc
Код в каталоге компилируется вlib
каталог, то мы находимся вpackage.json
Вход"main"
изменить на"lib/index.js"
, чтобы у кода, доступного для внешнего мира, не было проблем с совместимостью.
скачатьbabel-cli
полагаться:
npm install --save-dev babel-cli
// 下载预设,预设就是别人配置好的一系列规则,编译在规则内的语法
npm install --save-dev babel-preset-es2015
Настроено.babelrc
:
{
"presets": ["es2015"]
}
существуетpackage.json
настроить егоscripts
:
"scripts": {
"build": "babel src -d lib",
"build:watch": "npm run build -- --watch"
}
беги вот такnpm run build
скомпилирует исходный файл вlib
каталог.
В-четвертых, напишите тесты
Для того, чтобы обеспечить стабильность программы, мы должны писать тест-кейсы, особенно когда ваша программа зависит от все большего и большего, например, если вы меняете модуль А, вы думаете, что с вашими изменениями все в порядке, но он будет выпущен как как только он выйдет. неожиданноbug
Потому что это влияет на модуль, о котором вы не знаете. В настоящее время особенно важно тестирование, которое может помочь вам избежать многих ошибок низкого уровня. Мы используемmocha
а такжеchai
Тестируйте фреймворки и утверждения, скачивайте зависимости.
npm install mocha chai --save-dev
Создаем корневую директорию проектаtest
содержание. Создайтеindex.formatDate.js
, содержание такое:
'use strict';
const chai = require('chai');
const formatDate = require('../lib/formatDate');
const expect = chai.expect;
const S = 1000;
describe('format dete', () => {
it('test 2s', function() {
expect(formatDate('2s')).to.be.equal(2 * S);
});
});
Здесь просто демонстрация базового синтаксиса, слишком много кода, подробности смотрите на складе. затем вpackage.json
добавить ещеscripts
:
"test": "npm run build && mocha -t 5000"
5. Travis-CI+Комбинезоны
Travis-CI
представляет собой проект сборки с непрерывной интеграцией, который сочетает в себеgithub
Он может выполнять очень мощные функции, такие как отправка на склад.PR
После теста он может автоматически запустить тестовый пример для вас.Если тест не пройден, вы не можетеmerge
прибытьmaster
,Coveralls
Это автоматизированная служба тестового покрытия для сбора отчетов о тестовом покрытии.Это бесплатно для проектов с открытым исходным кодом.После настройки вы можете создать отчет о тестовом покрытии вашего кода.badge
.Coveralls
можно использоватьGitHub
Войдите в свою учетную запись.После входа вы можете добавить отчеты, которые необходимо собрать, на https://coveralls.io/repos/newrepo
.
Сначала установите егоistanbul
Этот инструмент для определения тестового покрытия кода:
npm install istanbul --save-dev
Затем в скриптах в package.json добавляем:
"cover": "istanbul cover node_modules/mocha/bin/_mocha"
бегатьnpm run cover
Вы можете увидеть покрытие вашего кода тестами
========= Coverage summary =========
Statements : 92.65% ( 63/68 )
Branches : 75% ( 15/20 )
Functions : 100% ( 14/14 )
Lines : 92.65% ( 63/68 )
====================================
Отправляйте отчеты о тестовом покрытии наCoveralls
, первая установкаcoveralls
:
npm install coveralls --save-dev
затем вpackage.json
серединаscripts
добавить в
"coveralls": "npm run cover -- --report lcovonly && cat ./coverage/lcov.info | coveralls"
затем создайте.travis.yml
документ,
sudo: false
language: node_js
os:
- linux
- osx
node_js:
- 6
- 8
- 9
- 10
branches:
only:
- master
install:
- npm install
script:
- npm run lint
- npm run build
- npm run cover
after_success:
- npm run coveralls
подтолкнуть код кgithub
После этого откройте https://travis-ci.org/, нажмите на аватарку в правом верхнем углу -> профиль, и включите переключатель собственного склада:
существуетREADME.md
Добавьте тестовое покрытие кода вbadge
, мы можем использовать http://shields.io, чтобы добавитьbadge
, такие как количество загрузок, количество звезд и т. д.badge
.
[![Build Status](https://travis-ci.org/wulv/del-expired-file.png)](https://travis-ci.org/wulv/del-expired-file)
[![Coverage Status](https://img.shields.io/coveralls/wulv/del-expired-file/master.svg?style=flat)](https://coveralls.io/github/wulv/del-expired-file?branch=master)
Вы можете, наконец, увидеть следующий эффект, когда вы видитеnpm
Если отображается тестовое покрытие, сразу снимается?
6. Отпустите
До сих пор мы в основном написали относительно надежное хранилище и теперь публикуем его наnpm
на, если нетnpm
учетная запись, вам нужно сначаларегистра затем запустить
npm adduser
Введите имя пользователя и пароль,npm publish
, так что ваш репозиторий опубликован, если вы хотите обновить версию, следуйтеSemver(语义化版本号)
Технические характеристики:
- Номер версии патча обновления: патч версии npm
- Номер младшей версии обновления: второстепенная версия npm
- Обновите основной номер версии: основная версия npm
Суммировать
Кратко опишите инструменты и методы, использованные выше:
Мы видим, что если вы просто реализуете функцию, ставите цель реализовать только требование, напишите этоnpm
Пакет комплектуется одним файлом и тремя функциями, но в этом случае предполагается, что пакет будет использоваться только вами, а обслуживание и модификация в дальнейшем будут более хлопотными, но после использования этого набора инструментов он будет быть намного крепче. То же самое и в работе: нам нужно стремиться к совершенству, постоянно совершенствовать свое мастерство и делать более совершенные работы.
Разместите рекламу, в Ханчжоу Zancheng набирает фронтенд-разработчиков. В апреле мы провели день открытых дверей по фронтенд-технологиям. Подробности по ссылке: https://tech.youzan.com/fe-open-day-2018 /. Множество преимуществ компании:
- Стандарт:
MacBook
, возмещение: экран дисплея, мышь, механическая клавиатура- Пять социальных страховок и один жилищный фонд, пособие на питание 980 юаней в месяц, возмещение сверхурочных расходов на такси, ежегодный
outing
и медосмотр, каждый человек имеет возможность ежегодно участвовать во внешних конференциях/тренингах и т.д.- Всевозможные ужины на высшем уровне, странные тимбилдинги, долговременные полки с едой...
- Высококачественные телевизоры, игровые приставки, бильярд, настольный теннис, бильярд, тренажеры и полноприводные трассы ждут вас, чтобы сражаться~
Если вы заинтересованы, пожалуйста, отправьте свое резюме наwulv#youzan.com
.