Instalação no projeto
Há dois caminhos: meta-pacote (tudo) ou pacotes individuais (recomendado em produção enxuta).
1) Meta-pacote
npm install @crystal-node/runtime
Isso puxa automaticamente core, controller, todos os engines e routes.
Ainda assim, instale os peers do engine que for usar:
# Puppeteer
npm install puppeteer vash
# + pdf-lib se usar suppress/merge por página
# wkhtmltopdf
npm install vash
# + binário wkhtmltopdf no PATH
# WeasyPrint
npm install vash pdf-lib
# + WeasyPrint no SO
# Rotas Express
npm install express
# Devbox (res.pdf) — em geral só o runtime
2) Instalação individual (recomendada)
Instale só o que o relatório precisa. Dependências @crystal-node/* internas vêm sozinhas.
Puppeteer
npm install @crystal-node/engine-puppeteer @crystal-node/controller puppeteer vash
# opcional:
npm install pdf-lib
const { reportControllerDotnetrequest } = require('@crystal-node/controller');
const { crystalFunctionsRuntime } = require('@crystal-node/core'); // já vem com o engine
const reportEngine = require('@crystal-node/engine-puppeteer');
const model = reportControllerDotnetrequest.buildReportModel(
req, __dirname, crystalFunctionsRuntime
);
await reportEngine.renderReportPdf(model, res, {
reportDir: __dirname,
pdf: { marginTop: 28, marginBottom: 14 }
});
Devbox
npm install @crystal-node/engine-devbox
Puxa core, controller e engine-wkhtmltopdf (fallback de suppress).
wkhtmltopdf
npm install @crystal-node/engine-wkhtmltopdf @crystal-node/controller vash
WeasyPrint
npm install @crystal-node/engine-weasyprint @crystal-node/controller vash pdf-lib
Só rotas
npm install @crystal-node/routes express
O que NÃO precisa instalar à mão
| Você instala | Já vem junto |
|---|---|
@crystal-node/engine-puppeteer |
@crystal-node/core |
@crystal-node/engine-devbox |
core, controller, engine-wkhtmltopdf |
@crystal-node/runtime |
todos os pacotes @crystal-node/* desta família |
Se fizer require de um engine sem o peer (ex.: Puppeteer sem puppeteer),
a falha só ocorre na hora de gerar o PDF — com mensagem pedindo o pacote.