TNTWeb — полное название фронтенд-команды Tencent News в Китае и Тайване.Небольшие партнеры в группе практиковались и накапливали опыт работы в крупных фронтенд-областях, таких как веб-интерфейс, разработка NodeJS, дизайн пользовательского интерфейса и мобильные приложения. .
В настоящее время команда в основном поддерживает разработку внешнего интерфейса для различных предприятий Tencent News.Помимо развития бизнеса, она также накопила некоторую внешнюю инфраструктуру, позволяющую повысить эффективность бизнеса и внедрять инновации в продукты.
Команда выступает за совместную разработку с открытым исходным кодом и имеет множество технических экспертов.github.com/tnfe
автор этой статьиЮньфэнадрес проекта:github.com/tnfe/mdebug
Давным-давно инженеры-программисты ускоряли процесс разработки, уменьшая дублирование кода в своих программах. Экосистема Nodejs повторно использует код в виде пакетов npm, и в настоящее время доступно более 1 миллиона пакетов с открытым исходным кодом. От небольших интернет-проектов до известных технологических стартапов используются пакеты npm, и некоторые из этих популярных пакетов загружаются более 10 миллионов раз в неделю и являются основой многих приложений. Сегодня большая часть кода в современных веб-приложениях исходит из модулей npm. Мы выбрали 30 часто используемых установочных пакетов nodejs, чтобы избавить вас от изобретения велосипеда.
1. Практические функции
1. qs
Простая и удобная библиотека для синтаксического анализа и форматирования строк.
const qs = require('qs');
const assert = require('assert');
const obj = qs.parse('a=c');
assert.deepEqual(obj, { a: 'c' });
const str = qs.stringify(obj);
assert.equal(str, 'a=c');
2.rxjs
RxJS — это набор модульных библиотек для создания асинхронных и событийных программ с использованием наблюдаемых коллекций и композиции в JavaScript.
const { range } = require('rxjs');
const { map, filter } = require('rxjs/operators');
range(1, 200).pipe(
filter(x => x % 2 === 1),
map(x => x + x)
).subscribe(x => console.log(x));
3. mitt
Крошечный 200b функциональный эмиттер событий/pub-sub.
import mitt from 'mitt'
const emitter = mitt()
emitter.on('foo', e => console.log('foo', e) )
emitter.on('*', (type, e) => console.log(type, e) )
emitter.emit('foo', { a: 'b' })
emitter.all.clear()
function onFoo() {}
emitter.on('foo', onFoo) // listen
emitter.off('foo', onFoo) // unlisten
4.Underscore.js
Underscore.js — это служебная библиотека для JavaScript, которая обеспечивает поддержку обычных функциональных подозреваемых (каждый, сопоставление, сокращение, фильтрация и т. д.) без расширения каких-либо основных объектов JavaScript.
const _ = require('underscore');
const list = [[5, 1, 7], [3, 2, 1]];
_.invoke(list, 'sort');
// => [[1, 5, 7], [1, 2, 3]]
5.day.js
Day.js — это минималистская библиотека JavaScript, которая анализирует, проверяет, манипулирует и отображает дату и время для современных браузеров с помощью API, в значительной степени совместимого с Moment.
const dayjs = require('dayjs');
dayjs().startOf('month').add(1, 'day').set('year', 2018).format('YYYY-MM-DD HH:mm:ss');
6.ramda
Ramda — это практичная функциональная библиотека с функциями без побочных эффектов, которые можно комбинировать с каррированием.
import * as R from 'ramda';
const double = x => x * 2;
R.map(double, [1, 2, 3]);
// => [2, 4, 6]
R.map(double, {x: 1, y: 2, z: 3});
// => {x: 2, y: 4, z: 6}
7.validator
Validator — это библиотека для проверки строк и дезинфицирующего средства.
var validator = require('validator');
validator.isEmail('foo@bar.com'); //=> true
8.yup
yup — это построитель схем для сложной, взаимозависимой проверки и преобразования.
import * as yup from 'yup';
let schema = yup.object().shape({
name: yup.string().required(),
age: yup.number().required().positive().integer(),
email: yup.string().email(),
website: yup.string().url(),
createdOn: yup.date().default(function () {
return new Date();
}),
});
// check validity
schema
.isValid({
name: 'jimmy',
age: 24,
})
.then(valid =>
console.log(valid) // => true
);
// you can try and type cast objects to the defined schema
schema.cast({
name: 'jimmy',
age: '24',
createdOn: '2014-09-23T19:25:25Z',
});
// => { name: 'jimmy', age: 24, createdOn: Date }
9.lodash
Lodash — это служебная библиотека, которая упрощает JavaScript, избавляя от необходимости работать с массивами, числами, объектами, строками и многим другим.
const _ = require('lodash');
const nums = _.range(1, 9);
// => [1, 2, 3, 4, 5, 6, 7, 8, 9]
const chunks = _.chunk(nums, 3);
// => [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
const right = _.takeRight(nums, 2);
// => [7, 8, 9]
10.date-fns
Date-fns предоставляет наиболее полный, простой и последовательный набор инструментов для управления датами JavaScript в браузере и Node.js.
import { format, formatDistance, formatRelative, subDays } from 'date-fns'
format(new Date(), '[Today is a] dddd')
//=> "Today is a Wednesday"
formatDistance(subDays(new Date(), 3), new Date())
//=> "3 days ago"
formatRelative(subDays(new Date(), 3), new Date())
//=> "last Friday at 7:26 p.m."
11.jsonwebtoken
Jsonwebtoken — это библиотека для подписи, проверки и декодирования веб-токенов JSON.
const jwt = require('jsonwebtoken');
const token = jwt.sign({ foo: 'bar' }, 'shhhhh');
12.uuid
UUID — это библиотека для создания универсальных уникальных идентификаторов RFC4122.
const { v4: uuidv4 } = require('uuid');
uuidv4(); // => '1a68a438-b077-468b-b1e8-dcdd976a0f5b'
2. Работа с файловой системой
1.rimraf
Rimraf предоставляет команду, эквивалентную команде UNIX rm -rf для узлов.
const rimraf = require('rimraf');
rimraf('./build', error => {
if (error) console.error(error);
});
2.fs-extra
FS-extra добавляет методы файловой системы, не включенные в собственный модуль fs, и добавляет поддержку промисов для методов fs.
const fs = require('fs-extra');
async function copyFiles () {
try {
await fs.copy('/tmp/myfile', '/tmp/mynewfile');
console.log('success!');
} catch (err) {
console.error(err);
}
}
copyFiles();
3.mkdirp
Как и mkdir -p, mkdirp рекурсивно создает каталог и все необходимые подкаталоги.
const mkdirp = require('mkdirp')
// return value is a Promise resolving to the first directory created
mkdirp('/tmp/foo/bar/baz').then(made =>
console.log(`made directories, starting with ${made}`));
4.glob
Glob — это библиотека для сопоставления файлов с использованием различных шаблонов.
const glob = require('glob');
// options is optional
glob("**/*.js", options, function (er, files) {
// files is an array of filenames.
// If the `nonull` option is set, and nothing
// was found, then files is ["**/*.js"]
// er is an error object or null.
});
5.shelljs
ShellJS — это переносимая (Windows/Linux/OS X) реализация команд оболочки Unix на основе Node.js API.
const shell = require('shelljs');
if (!shell.which('git')) {
shell.echo('Sorry, this script requires git');
shell.exit(1);
}
// Copy files to release dir
shell.rm('-rf', 'out/Release');
shell.cp('-R', 'stuff/', 'out/Release');
// Replace macros in each .js file
shell.cd('lib');
shell.ls('*.js').forEach(function (file) {
shell.sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
shell.sed('-i', /^.*REMOVE_THIS_LINE.*$/, '', file);
shell.sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, shell.cat('macro.js'), file);
});
shell.cd('..');
// Run external tool synchronously
if (shell.exec('git commit -am "Auto-commit"').code !== 0) {
shell.echo('Error: Git commit failed');
shell.exit(1);
}
6.js-yaml
Js-yaml — это реализация YAML, популярного удобного для человека языка сериализации данных.
const yaml = require('js-yaml');
const fs = require('fs');
// Get document, or throw exception on error
try {
const doc = yaml.load(fs.readFileSync('/home/ixti/example.yml', 'utf8'));
console.log(doc);
} catch (e) {
console.log(e);
}
3. Веб-фреймворк
1. koa
Koa — это новая веб-инфраструктура, разработанная командой разработчиков Express, чтобы стать более компактной, выразительной и более надежной основой для веб-приложений и API.
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
2. express
Express.js — самая популярная, быстрая и минималистичная серверная веб-инфраструктура node.js.
const express = require('express');
const app = express();
app.get('/', function (req, res) {
res.send('Hello World');
});
app.listen(3000);
3. Fastify
Fastify — одна из самых быстрых расширяемых веб-платформ, ориентированная на предоставление наилучшего опыта разработчика с минимальными накладными расходами.
const fastify = require('fastify')({
logger: true
});
fastify.get('/', async (request, reply) => {
reply.type('application/json').code(200);
return { hello: 'world' };
});
fastify.listen(3000, (err, address) => {
if (err) throw err;
fastify.log.info(`App listening on ${address}`);
});
4. socket.io
Socket.IO обеспечивает двустороннюю связь в режиме реального времени на основе событий с использованием длинных опросов или WebSockets с обнаружением отключения и поддержкой автоматического повторного подключения.
const server = require('http').createServer();
const io = require('socket.io')(server);
io.on('connection', client => {
client.on('event', data => { /* … */ });
client.on('disconnect', () => { /* … */ });
});
server.listen(3000);
4. Вспомогательная разработка
1. jest
Jest завершен и готов к настройке решения для тестирования JavaScript.
test('adds 1 + 2 to equal 3', () => {
expect(1 + 2).toBe(3);
});
2. typescript
TypeScript — это расширяемый JavaScript. Это язык, который добавляет необязательные типы и компилируется в простой, удобочитаемый JavaScript.
interface User {
name: string;
id: number;
}
const user: User = {
name: "Hayes",
id: 0,
};
3.winston
Winston — это простая и общая библиотека ведения журналов, которая поддерживает несколько транспортов.
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
defaultMeta: { service: 'user-service' },
transports: [
// Write all logs with level `error` and below to `error.log`
new winston.transports.File({ filename: 'error.log', level: 'error' }),
// Write all logs with level `info` and below to `combined.log`
new winston.transports.File({ filename: 'combined.log' }),
],
});
logger.log({
level: 'error',
message: 'Hello distributed log files!'
});
logger.info('Hello again distributed logs');
4.debug
Debug — это крошечная утилита отладки JavaScript, которая имитирует методы отладки, лежащие в основе Node.js.
const debug = require('debug')('http')
, http = require('http')
, name = 'My App';
debug('booting %o', name);
http.createServer(function(req, res){
debug(req.method + ' ' + req.url);
res.end('hello\n');
}).listen(3000, function(){
debug('listening');
});
5. eslint
ESLint — это инструмент для поиска и устранения проблем в коде JavaScript и TypeScript.
{
"rules": {
"semi": ["error", "always"],
"quotes": ["error", "double"]
}
}
6. nodemon
Nodemon — это инструмент, который помогает в разработке приложений на основе node.js, автоматически перезапуская приложения узла при обнаружении изменений файлов в каталоге.
nodemon ./server.js
7. dotenv
Dotenv — это модуль с нулевой зависимостью, который загружает переменные среды из файлов .env в process.env.
.env file:
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
require('dotenv').config();
const db = require('db');
db.connect({
host: process.env.DB_HOST,
username: process.env.DB_USER,
password: process.env.DB_PASS
});
8. cross-env
Cross-env позволяет сценариям устанавливать и использовать переменные среды на разных платформах.
{
"scripts": {
"start-prod": "cross-env NODE_ENV=production node ./app.js"
}
}