Logo
Книга для начинающих
ВходРегистрация
/
Программирование
/
Курс JavaScript
/

Пакеты

JavaScript: Пакеты

По мере роста программы увеличивается не только количество строк кода, но и количество модулей. В небольших проектах десятки файлов ещё можно держать рядом, но в реальных приложениях файлов могут быть сотни и тысячи. Кроме того, удобный код хочется переиспользовать в разных проектах.

В Python для группировки модулей используют пакеты-директории. В экосистеме JavaScript единицей переиспользования и распространения служит пакет (npm-пакет). Пакет — это набор модулей, который публикуют и устанавливают целиком.

Что такое пакет

Пакет описывается файлом package.json и устанавливается командой npm install в директорию node_modules. Именно оттуда подключаются его модули. Один из таких пакетов — hexlet-basics, из которого мы импортируем функции в этом курсе.

Импорт по имени пакета

Когда пакет установлен, его содержимое импортируют по имени пакета, а не по пути к файлу:

import { round } from 'hexlet-basics/math';

console.log(round(3.14159, 2)); // => 3.14

Один пакет — несколько модулей

Пакет обычно содержит не один модуль, а несколько. Чтобы выбрать конкретный модуль внутри пакета, после его имени указывают путь через /:

import { reverse } from 'hexlet-basics/string'; // модуль string пакета hexlet-basics
import { round } from 'hexlet-basics/math';     // модуль math того же пакета

Часть до / — это имя пакета, а часть после — модуль внутри него. Так один пакет может объединять много модулей, сгруппированных по задачам.

package.json

Пакет сам описывает себя в файле package.json. В нём указывают имя, зависимости и то, какие модули пакет отдаёт наружу:

{
  "name": "hexlet-basics",
  "dependencies": {},
  "exports": {
    "./string": "./src/hexlet/string.js",
    "./math": "./src/hexlet/math.js"
  }
}

Поле exports задаёт, какие пути доступны при импорте. Благодаря ему запись hexlet-basics/string приводит к нужному файлу внутри пакета.

node_modules и реестр npm

Установленные пакеты попадают в директорию node_modules. Их не пишут вручную — основным источником служит реестр npm, где опубликованы сотни тысяч готовых пакетов: для работы с датами, сетью, тестами и почти любой другой задачей.

Особняком стоят встроенные модули среды Node.js (node:fs, node:path и другие). Их не нужно устанавливать — они поставляются вместе с Node.js, как стандартная библиотека.

Задание

Реализуйте функцию formatPrice(). Она принимает число и возвращает его строковое представление, округлённое до двух знаков после запятой.

Используйте функцию round() из модуля hexlet-basics/math — это другой модуль того же пакета hexlet-basics, с которым вы работали в прошлом уроке. Импорт напишите самостоятельно.

formatPrice(12.3456); // => '12.35'
formatPrice(2.5);     // => '2.50'
formatPrice(10);      // => '10.00'

Подсказка

  • В начале файла импортируйте функцию: import { round } from 'hexlet-basics/math';
  • Второй аргумент round() — количество знаков после запятой
Коммерческий опыт и Трудоустройство

Полезное

  • О пакетах и модулях в npm

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
/
Программирование
/
Курс JavaScript
/

Пакеты

JavaScript: Пакеты

По мере роста программы увеличивается не только количество строк кода, но и количество модулей. В небольших проектах десятки файлов ещё можно держать рядом, но в реальных приложениях файлов могут быть сотни и тысячи. Кроме того, удобный код хочется переиспользовать в разных проектах.

В Python для группировки модулей используют пакеты-директории. В экосистеме JavaScript единицей переиспользования и распространения служит пакет (npm-пакет). Пакет — это набор модулей, который публикуют и устанавливают целиком.

Что такое пакет

Пакет описывается файлом package.json и устанавливается командой npm install в директорию node_modules. Именно оттуда подключаются его модули. Один из таких пакетов — hexlet-basics, из которого мы импортируем функции в этом курсе.

Импорт по имени пакета

Когда пакет установлен, его содержимое импортируют по имени пакета, а не по пути к файлу:

import { round } from 'hexlet-basics/math';

console.log(round(3.14159, 2)); // => 3.14

Один пакет — несколько модулей

Пакет обычно содержит не один модуль, а несколько. Чтобы выбрать конкретный модуль внутри пакета, после его имени указывают путь через /:

import { reverse } from 'hexlet-basics/string'; // модуль string пакета hexlet-basics
import { round } from 'hexlet-basics/math';     // модуль math того же пакета

Часть до / — это имя пакета, а часть после — модуль внутри него. Так один пакет может объединять много модулей, сгруппированных по задачам.

package.json

Пакет сам описывает себя в файле package.json. В нём указывают имя, зависимости и то, какие модули пакет отдаёт наружу:

{
  "name": "hexlet-basics",
  "dependencies": {},
  "exports": {
    "./string": "./src/hexlet/string.js",
    "./math": "./src/hexlet/math.js"
  }
}

Поле exports задаёт, какие пути доступны при импорте. Благодаря ему запись hexlet-basics/string приводит к нужному файлу внутри пакета.

node_modules и реестр npm

Установленные пакеты попадают в директорию node_modules. Их не пишут вручную — основным источником служит реестр npm, где опубликованы сотни тысяч готовых пакетов: для работы с датами, сетью, тестами и почти любой другой задачей.

Особняком стоят встроенные модули среды Node.js (node:fs, node:path и другие). Их не нужно устанавливать — они поставляются вместе с Node.js, как стандартная библиотека.

Задание

Реализуйте функцию formatPrice(). Она принимает число и возвращает его строковое представление, округлённое до двух знаков после запятой.

Используйте функцию round() из модуля hexlet-basics/math — это другой модуль того же пакета hexlet-basics, с которым вы работали в прошлом уроке. Импорт напишите самостоятельно.

formatPrice(12.3456); // => '12.35'
formatPrice(2.5);     // => '2.50'
formatPrice(10);      // => '10.00'

Подсказка

  • В начале файла импортируйте функцию: import { round } from 'hexlet-basics/math';
  • Второй аргумент round() — количество знаков после запятой
Коммерческий опыт и Трудоустройство

Полезное

  • О пакетах и модулях в npm

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
← ПредыдущийСледующий →
← ПредыдущийСледующий →
← ПредыдущийСледующий →

Ваше упражнение проверяется по этим тестам

// @ts-check

import { expect, test } from 'vitest';
import formatPrice from './index.js';

test('packages', () => {
  expect(formatPrice(12.3456)).toBe('12.35');
  expect(formatPrice(2.5)).toBe('2.50');
  expect(formatPrice(10)).toBe('10.00');
});
← ПредыдущийСледующий →

Решение учителя откроется через:

20:00

waiting_clock
← ПредыдущийСледующий →