9.1 Подготовка проекта
Создание и публикация TypeScript модулей — важный аспект разработки библиотек и инструментов, которые могут использоваться другими разработчиками. Процесс включает в себя создание TypeScript-модуля, его сборку в формат, совместимый с JavaScript, а также публикацию на платформе, такой как npm.
Сейчас мы с вами пошагово сделаем все шаги, необходимые для пакетирования и публикации TypeScript модуля.
Для начала создайте новый проект и инициализируйте его с помощью npm:
mkdir my-typescript-library
cd my-typescript-library
npm init -y
Это создаст файл package.json с основными настройками вашего проекта.
Создайте файл tsconfig.json в корне проекта. Этот файл будет содержать конфигурацию TypeScript компилятора. Укажите такие настройки: создание деклараций типов (declaration: true), компиляция в стандарт ECMAScript 6 (target: "ES6") и использование модуля CommonJS (module: "commonjs").
Пример tsconfig.json:
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"declaration": true,
"outDir": "./dist",
"strict": true
},
"include": ["src"],
"exclude": ["node_modules", "dist"]
}
9.2 Написание кода модуля
Создайте папку src в корне проекта и добавьте исходные файлы TypeScript.
Пример src/index.ts:
export function add(x: number, y: number): number {
return x + y;
}
export function subtract(x: number, y: number): number {
return x - y;
}
Этот файл экспортирует две функции add и subtract.
9.3 Сборка проекта
Настройте сборку проекта с использованием TypeScript компилятора. Добавьте скрипт сборки в файл package.json.
Пример package.json:
{
"name": "my-typescript-library",
"version": "1.0.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
"build": "tsc"
},
"devDependencies": {
"typescript": "^4.3.5",
"@types/node": "^14.14.31"
}
}
Поле main указывает на основной файл вашей библиотеки, а поле types указывает на файл деклараций типов. Запустите сборку проекта.
npm run build
После выполнения команды в папке dist появятся скомпилированные файлы JavaScript и декларации типов.
9.4 Добавление README и лицензии
Добавьте файл README.md с описанием вашей библиотеки.
Пример README.md:
# My TypeScript Library
This is a simple TypeScript library that provides basic arithmetic functions.
## Installation
npm install my-typescript-library
## Usage
import { add, subtract } from 'my-typescript-library';
console.log(add(2, 3)); // 5
console.log(subtract(5, 3)); // 2
Также добавьте файл лицензии, например, LICENSE.md.
Пример LICENSE.md:
MIT License
Copyright (c) 2024 My Name
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
...
9.5 Тестирование модуля
Для обеспечения качества вашей библиотеки важно добавить тесты. Вы можете использовать популярные инструменты, такие как Jest или Mocha.
Установка Jest:
npm install jest @types/jest ts-jest --save-dev
Настройка Jest:
Создайте файл jest.config.js:
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
testMatch: ['**/tests/**/*.test.ts']
};
Добавление тестов:
Создайте папку tests и добавьте тестовые файлы.
Пример tests/index.test.ts:
import { add, subtract } from '../src/index';
test('adds 1 + 2 to equal 3', () => {
expect(add(1, 2)).toBe(3);
});
test('subtracts 5 - 2 to equal 3', () => {
expect(subtract(5, 2)).toBe(3);
});
Добавление скрипта тестирования в package.json:
"scripts": {
"build": "tsc",
"test": "jest"
}
Запуск тестов:
npm test
9.6 Публикация на npm
Чтобы опубликовать ваш модуль на npm, выполните следующие шаги:
Вход в учетную запись npm:
npm login
Публикация модуля:
npm publish
Убедитесь, что имя вашего пакета уникально и не конфликтует с уже существующими пакетами на npm.
Управление версиями
Следите за версиями вашего модуля. Используйте семантическое версионирование (semver) для обозначения изменений в вашем коде:
- PATCH: исправления ошибок, не влияющие на API
- MINOR: добавление новых функций, не нарушающих обратную совместимость
- MAJOR: изменения, нарушающие обратную совместимость
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ