Платформа
Платформа определяет целевую среду выполнения для собранного JavaScript-кода.
По умолчанию tsdown собирает код для среды выполнения node, но вы можете настроить это с помощью опции --platform:
tsdown --platform node # по умолчанию
tsdown --platform browser
tsdown --platform neutralДоступные платформы
node: Предназначен для среды выполнения Node.js и совместимых окружений, таких как Deno и Bun. Это платформа по умолчанию, где встроенные модули Node.js (например,fs,path) разрешаются автоматически. Идеально подходит для инструментальных цепочек или серверных проектов.browser: Нацелен на веб-браузеры (например, Chrome, Firefox). Это подходит для фронтенд-проектов. Если ваш код использует встроенные модули Node.js, будет отображено предупреждение, и вам может потребоваться использовать полифиллы или прослойки для обеспечения совместимости.neutral: Универсальный режим без привязки к конкретной среде выполнения. Используйте это, если ваш код предназначен для работы в нескольких средах или вы хотите полностью контролировать поведение среды выполнения. Это особенно полезно для библиотек или переиспользуемого кода, который может использоваться как в Node.js, так и в браузерах.
NOTE
Для формата CJS платформа всегда установлена как 'node' и не может быть изменена. Почему?
Пример
# Сборка для Node.js (по умолчанию)
tsdown --platform node
# Сборка для браузеров
tsdown --platform browser
# Сборка для нейтральной платформы
tsdown --platform neutralTIP
Выбор правильной платформы гарантирует, что ваш код оптимизирован для предполагаемой среды выполнения. Например, используйте browser для фронтенд-проектов, node для серверных приложений и neutral для универсальных библиотек.
Разрешение модулей (Module Resolution)
Разные платформы используют собственные стратегии определения точек Параметр mainFields задаёт, какие поля в файле package.json следует проверять:
node:['main', 'module']browser:['browser', 'module', 'main']neutral:[](основывается исключительно на полеexports)
При использовании платформы neutral пакеты без поля exports могут вызвать проблемы с разрешением зависимостей. Если вы видите предупреждения вроде:
Help: The "main" field here was ignored. Main fields must be configured explicitly when using the "neutral" platform.задайте mainFields явно в inputOptions.resolve:
export default defineConfig({
platform: 'neutral',
inputOptions: {
resolve: {
mainFields: ['module', 'main'],
},
},
})Дополнительную информацию см. в документации по параметрам разрешения Rolldown.