TweetNaCl.js представляет собой компактную реализацию криптографической библиотеки NaCl (Networking and Cryptography library), адаптированную для JavaScript. В экосистеме встречается также обозначение nacl.js, однако чаще используется именно пакет tweetnacl и его дополнительные утилиты.
Основные сценарии использования связаны с браузерной криптографией и Node.js-средой: шифрование, подпись сообщений, генерация ключей, работа с публичной криптографией без зависимостей от нативных модулей.
Наиболее распространённый способ подключения — установка через npm. Библиотека разделена на ядро и вспомогательные утилиты для работы с форматами данных.
Установка базового пакета:
npm install tweetnacl
Дополнительный пакет для преобразования строк и бинарных данных:
npm install tweetnacl-util
Использование в CommonJS-среде Node.js:
const nacl = require("tweetnacl");
nacl.util = require("tweetnacl-util");
В современных сборщиках (Webpack, Vite, Rollup) подключение аналогично, но чаще применяется ES Modules-синтаксис.
В среде, поддерживающей ES Modules (современные браузеры, Node.js ESM, Vite, Deno-подобные сборки), используется импорт:
import nacl from "tweetnacl";
import naclUtil from "tweetnacl-util";
Некоторые сборки требуют явного обращения к утилитам:
const message = naclUtil.decodeUTF8("hello");
const keyPair = nacl.box.keyPair();
TweetNaCl.js полностью совместим с ESM благодаря своей структуре без побочных эффектов и минимальной зависимости от окружения.
В старых проектах Node.js или при использовании CommonJS-конфигурации
применяется классический require.
const nacl = require("tweetnacl");
const naclUtil = require("tweetnacl-util");
Особенность этой схемы заключается в том, что библиотека поставляется как UMD-совместимый модуль, поэтому корректно работает в большинстве сборок без дополнительной конфигурации транспайлеров.
Для прямого подключения в браузере без инструментов сборки используется CDN. Подходит для прототипов, учебных проектов и простых страниц.
Подключение через jsDelivr:
<script src="https://cdn.jsdelivr.net/npm/tweetnacl@1.0.3/nacl.min.js"></script>
Дополнительный модуль утилит:
<script src="https://cdn.jsdelivr.net/npm/tweetnacl-util@0.15.1/nacl-util.min.js"></script>
После подключения библиотека становится доступна через глобальный объект:
const keyPair = nacl.box.keyPair();
const encoded = nacl.util.encodeUTF8("data");
Аналогичный вариант через unpkg:
<script src="https://unpkg.com/tweetnacl@1.0.3/nacl.min.js"></script>
При работе через сборщики модулей библиотека устанавливается через npm и импортируется напрямую. Благодаря отсутствию нативных зависимостей она не требует polyfill-ов.
Пример использования в модульной архитектуре:
import nacl from "tweetnacl";
const keyPair = nacl.box.keyPair();
В некоторых конфигурациях Webpack может потребоваться настройка режима совместимости модулей:
resolve: {
fallback: {
crypto: false
}
}
Однако в большинстве современных окружений это не требуется.
В Node.js библиотека работает без ограничений, так как использует чистую JavaScript-реализацию криптографических алгоритмов.
В браузере важно учитывать, что TweetNaCl.js не зависит от WebCrypto API, что обеспечивает одинаковое поведение во всех средах, включая старые браузеры.
При использовании CDN важно следить за порядком подключения:
tweetnacltweetnacl-util, если требуется работа со
строкамиЯдро библиотеки (tweetnacl) работает исключительно с
Uint8Array. Все операции — шифрование, подписи, генерация
ключей — используют бинарные данные.
Пакет tweetnacl-util добавляет вспомогательные
функции:
encodeUTF8decodeUTF8encodeBase64decodeBase64Пример:
const message = naclUtil.decodeUTF8("secure message");
const encrypted = nacl.secretbox(message, nonce, key);
Типы обычно устанавливаются отдельно:
npm install --save-dev @types/tweetnacl
После этого импорт работает стандартным образом:
import nacl from "tweetnacl";
Некоторые проекты обходятся без типов, используя встроенную типизацию
через Uint8Array.
npm-подключение ориентировано на сборочные системы и серверные приложения, обеспечивая:
CDN-вариант ориентирован на:
TweetNaCl.js не требует нативных криптографических модулей Node.js. В
отличие от crypto, библиотека реализует алгоритмы полностью
на JavaScript.
Пример генерации ключевой пары:
const nacl = require("tweetnacl");
const keyPair = nacl.box.keyPair();
console.log(keyPair.publicKey);
console.log(keyPair.secretKey);
В проектах, где код выполняется и в браузере, и на сервере, используется единый импорт через npm:
import nacl from "tweetnacl";
Такой подход обеспечивает одинаковое поведение криптографических операций во всех средах, поскольку библиотека не зависит от платформенных API.
При использовании tweetnacl-util расширение обычно
выполняется вручную:
import nacl from "tweetnacl";
import * as naclUtil from "tweetnacl-util";
nacl.util = naclUtil;
Это позволяет сохранять доступ к функциям кодирования в едином пространстве имен.
При использовании CDN в устаревших браузерах библиотека работает без транспиляции, так как код уже поставляется в ES5-совместимом формате UMD.
<script src="https://cdn.jsdelivr.net/npm/tweetnacl/nacl.min.js"></script>
TweetNaCl.js поддерживает несколько форматов загрузки:
import)require)Такая структура позволяет использовать библиотеку практически в любой JavaScript-среде без адаптации к конкретной системе модулей.