5.1 Webpack
Для полноценной работы с TypeScript необходимо интегрировать его с системами сборки, такими как Webpack, Gulp и Parcel. В этой лекции вы научитесь настраивать эти инструменты для работы с TypeScript, чтобы обеспечить эффективный процесс разработки.
Webpack — это мощный инструмент для сборки модулей JavaScript. Он используется для компиляции модулей в статические файлы для браузера.
1. Установка Webpack и TypeScript
Для начала создайте новый проект и установите необходимые зависимости:
mkdir my-webpack-ts-app
cd my-webpack-ts-app
npm init -y
npm install typescript ts-loader webpack webpack-cli --save-dev
2. Создание конфигурационного файла tsconfig.json
Создайте файл tsconfig.json в корне проекта:
{
"compilerOptions": {
"target": "ES6",
"module": "ESNext",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"include": ["src"],
"exclude": ["node_modules"]
}
Объяснения:
сompilerOptions
Это объект, содержащий настройки компилятора TypeScript. Все параметры внутри этого объекта управляют различными аспектами процесса компиляции.
- target: "ES6": указывает, до какой версии ECMAScript должен быть скомпилирован код. В данном случае компиляция будет нацелена на ECMAScript 6 (ES2015).
- module: "ESNext": определяет, какой модульный стандарт будет использоваться. ESNext выбирает последний доступный стандарт ECMAScript для модулей.
- outDir: "./dist": задает выходную директорию, куда будут помещены скомпилированные файлы JavaScript. В данном случае это папка ./dist.
- strict: true: включает строгий режим компиляции TypeScript, который активирует несколько проверок, повышающих типобезопасность кода. Включает такие проверки, как noImplicitAny, strictNullChecks и другие.
- esModuleInterop: true: включает совместимость с модулями ES и CommonJS, чтобы можно было корректно импортировать модули, написанные в стиле CommonJS (например, библиотеки Node.js).
- skipLibCheck: true: отключает проверку типов в библиотеках, которые подключаются через node_modules. Это ускоряет компиляцию, но снижает уровень проверок типов в подключаемых библиотеках.
3. Создание конфигурационного файла Webpack
Создайте файл webpack.config.js в корне проекта:
const path = require('path');
// Подключает модуль Node.js 'path', который
// предоставляет утилиты для работы с путями файловой системы.
module.exports = {
entry: './src/index.ts',
// Указывает входную точку для Webpack, то есть файл, с которого
// начинается сборка. В данном случае это './src/index.ts'.
module: {
rules: [
{
test: /\.ts$/, // Указывает регулярное выражение для файлов, которые
// Webpack должен обрабатывать с помощью правила (все файлы с расширением .ts).
use: 'ts-loader', // Указывает, какой загрузчик (loader) использовать для обработки
// TypeScript-файлов. В данном случае это 'ts-loader', который компилирует TypeScript в JavaScript.
exclude: /node_modules/ // Исключает файлы и папки внутри node_modules,
// чтобы они не обрабатывались 'ts-loader'.
}
]
},
resolve: {
extensions: ['.ts', '.js'] // Указывает расширения файлов, которые Webpack будет
// пытаться разрешать при импортах. Это позволяет не указывать расширения явно при импорте файлов.
},
output: {
filename: 'bundle.js', // Имя файла, который будет сгенерирован после сборки. В данном случае это 'bundle.js'.
path: path.resolve(__dirname, 'dist') // Указывает путь для выходного файла. Функция 'path.resolve'
// создаёт абсолютный путь, и здесь файлы будут сохранены в папке 'dist' относительно корневой директории.
},
mode: 'development' // Указывает режим сборки. В режиме 'development' Webpack создаёт менее
// оптимизированный, но более удобный для отладки код.
};
Основные элементы:
- entry:
- Входная точка сборки Webpack. В данном случае это ./src/index.ts — файл, с которого начнётся сборка всех зависимостей.
- module.rules:
- Это массив правил для обработки разных типов файлов.
- test: Определяет тип файлов, к которым будет применяться правило (файлы с расширением .ts).
- use: Указывает, какой загрузчик (ts-loader) будет использоваться для обработки этих файлов. ts-loader компилирует TypeScript в JavaScript.
- exclude: Исключает из обработки файлы и папки в директории node_modules.
- resolve:
- Определяет расширения файлов, которые можно импортировать без указания расширения. Например, при импорте import foo from './foo';, Webpack сначала попробует найти foo.ts, а потом foo.js.
- output:
- filename: Имя итогового файла сборки — bundle.js.
- path: Путь к директории, куда будет сохраняться файл сборки (dist).
- mode:
- Режим работы Webpack — development означает, что код будет скомпилирован в более читаемом виде с возможностью отладки.
4. Создание структуры проекта
Создайте папку src и файл src/index.ts:
mkdir src
touch src/index.ts
Добавьте простой TypeScript код в src/index.ts:
const greeting: string = 'Hello, Webpack with TypeScript!';
console.log(greeting);
5. Скрипты для сборки
Добавьте скрипты в package.json для сборки проекта:
"scripts": {
"build": "webpack"
}
6. Сборка проекта
Запустите сборку проекта:
npm run build
Ваш проект будет собран, и скомпилированный файл bundle.js будет находиться в папке dist.
5.2 Gulp
Gulp — это автоматизатор задач, который используется для автоматизации повторяющихся задач в процессе разработки.
1. Установка Gulp и TypeScript
Создайте новый проект и установите необходимые зависимости:
mkdir my-gulp-ts-app
cd my-gulp-ts-app
npm init -y
npm install gulp typescript gulp-typescript --save-dev
2. Создание конфигурационного файла tsconfig.json
Создайте файл tsconfig.json в корне проекта:
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"include": ["src"],
"exclude": ["node_modules"]
}
3. Создание Gulpfile
Создайте файл gulpfile.js в корне проекта:
const gulp = require('gulp'); // Подключает Gulp, инструмент автоматизации сборки.
const ts = require('gulp-typescript'); // Подключает плагин для обработки TypeScript-файлов.
const tsProject = ts.createProject('tsconfig.json'); // Создаёт проект TypeScript на основе конфигурации из 'tsconfig.json'.
// Задача для обработки TypeScript
gulp.task('scripts', () => {
return tsProject.src() // Получает все файлы TypeScript из проекта.
.pipe(tsProject()) // Передаёт файлы в tsProject для компиляции.
.js.pipe(gulp.dest('dist')); // Сохраняет скомпилированные JavaScript-файлы в папку 'dist'.
});
// Задача для наблюдения за изменениями в TypeScript-файлах
gulp.task('watch', () => {
gulp.watch('src/**/*.ts', gulp.series('scripts')); // Наблюдает за изменениями в файлах .ts в папке 'src' и запускает задачу 'scripts'.
});
// Задача по умолчанию, которая выполняет 'scripts' и затем 'watch'
gulp.task('default', gulp.series('scripts', 'watch'));
4. Создание структуры проекта
Создайте папку src и файл src/index.ts:
mkdir src
touch src/index.ts
Добавьте простой TypeScript код в src/index.ts:
const greeting: string = 'Hello, Gulp with TypeScript!';
console.log(greeting);
5. Запуск Gulp задач
Запустите Gulp для сборки и отслеживания изменений:
npx gulp
Ваш проект будет собран, и скомпилированные файлы будут находиться в папке dist.
5.3 Parcel
Parcel — это система сборки с нулевой конфигурацией, которая упрощает процесс настройки и использования.
1. Установка Parcel и TypeScript
Создайте новый проект и установите необходимые зависимости:
mkdir my-parcel-ts-app
cd my-parcel-ts-app
npm init -y
npm install parcel typescript --save-dev
2. Создание конфигурационного файла tsconfig.json
Создайте файл tsconfig.json в корне проекта:
{
"compilerOptions": {
"target": "ES6",
"module": "ESNext",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"include": ["src"],
"exclude": ["node_modules"]
}
3. Создание структуры проекта
Создайте папку src и файл src/index.ts:
mkdir src
touch src/index.ts
Добавьте простой TypeScript код в src/index.ts:
const greeting: string = 'Hello, Parcel with TypeScript!';
console.log(greeting);
4. Скрипты для сборки и запуска
Добавьте скрипты в package.json для сборки и запуска проекта:
"scripts": {
"dev": "parcel src/index.html",
"build": "parcel build src/index.html"
}
5. Создание HTML файла
Создайте файл src/index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Parcel TypeScript</title>
</head>
<body>
<script src="./index.ts"></script>
</body>
</html>
6. Запуск проекта
Запустите проект в режиме разработки:
npm run dev
Parcel автоматически соберет и запустит проект, а также будет отслеживать изменения в файлах и пересобирать проект по мере необходимости.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ