Модули позволяют структурировать код, разделяя его на независимые части с четко определёнными интерфейсами. Это обеспечивает повторное использование компонентов, упрощает поддержку и тестирование приложений. В экосистеме JavaScript широко применяются два основных стандарта модулей: CommonJS и ES6 Modules (ESM). Их различия и особенности важно учитывать при разработке на Vue.js.
CommonJS — стандарт модулей, использующийся в Node.js. Основные принципы:
module.exports.require().Пример экспорта и импорта модуля:
// math.js
function sum(a, b) {
return a + b;
}
function multiply(a, b) {
return a * b;
}
module.exports = { sum, multiply };
// app.js
const math = require('./math');
console.log(math.sum(2, 3)); // 5
console.log(math.multiply(4, 5)); // 20
Особенности CommonJS:
ES6 Modules — стандарт модулей, введённый в спецификации ECMAScript 2015, поддерживается браузерами и современными сборщиками, такими как Vite, Webpack или Rollup.
Экспорт и импорт:
// math.js
export function sum(a, b) {
return a + b;
}
export function multiply(a, b) {
return a * b;
}
// app.js
import { sum, multiply } from './math.js';
console.log(sum(2, 3)); // 5
console.log(multiply(4, 5)); // 20
// logger.js
export default function log(message) {
console.log(message);
}
// app.js
import log from './logger.js';
log('Привет, мир!');
Особенности ES6 Modules:
import().<script type="module">.| Характеристика | CommonJS | ES6 Modules |
|---|---|---|
| Поддержка среды | Node.js | Node.js и браузеры |
| Загрузка модулей | Синхронная | Статическая и динамическая (асинхронная) |
| Синтаксис импорта | require() |
import |
| Синтаксис экспорта | module.exports |
export и export default |
| Оптимизация | Нет tree-shaking | Поддержка tree-shaking |
Преимущество ES6 Modules в том, что они позволяют компиляторам и сборщикам удалять неиспользуемый код, снижая размер финального бандла. CommonJS часто используется на сервере, где синхронная загрузка не критична.
Vue.js построен с поддержкой ES6 Modules, что позволяет использовать современный синтаксис импорта и экспорта:
// components/Button.vue
<template>
<button @click="handleClick">{{ label }}</button>
</template>
<script>
export default {
name: 'Button',
props: {
label: String
},
methods: {
handleClick() {
console.log('Button clicked');
}
}
}
</script>
Компоненты Vue можно импортировать в другие модули с помощью
import:
// App.vue
<template>
<Button label="Нажми меня" />
</template>
<script>
import Button from './components/Button.vue';
export default {
components: { Button }
}
</script>
Использование ES6 Modules в Vue.js обеспечивает чистую архитектуру, упрощает интеграцию с современными сборщиками и позволяет применять tree-shaking для уменьшения размера бандла.
Vue.js активно использует динамический импорт для ленивой загрузки компонентов:
// router/index.js
const Home = () => import('../views/Home.vue');
const About = () => import('../views/About.vue');
export default [
{ path: '/', component: Home },
{ path: '/about', component: About }
];
Преимущества динамического импорта:
Для проектов, где используется Node.js с CommonJS, возможен постепенный переход на ES6 Modules:
.mjs или указать
"type": "module" в package.json.require() на import.module.exports на export или
export default.Такой подход упрощает интеграцию Vue.js с современными инструментами сборки и открывает возможности для tree-shaking и асинхронной загрузки.
Использование модульной системы — ключевой аспект современной разработки на Vue.js, обеспечивающий масштабируемость, читаемость и оптимизацию приложений.