{"id":22140,"library":"rollup-plugin-napi-image","title":"rollup-plugin-napi-image","description":"Rollup and Vite plugin for optimizing images (JPEG, PNG, WebP, AVIF) using napi-rs/Image, a native Rust-based image processing library. Version 0.6.1 released in 2025. It supports both lossy (with configurable quality) and lossless modes, and allows conversion to modern formats (e.g., WebP to AVIF) via a custom function. Unlike imagemin-based plugins, it avoids node-gyp and provides faster performance via N-API. Compatible with Rollup and Vite, with TypeScript types included. Good for build-time image optimization in modern bundler setups.","status":"active","version":"0.6.1","language":"javascript","source_language":"en","source_url":"ssh://git@github.com/cijiugechu/rollup-plugin-napi-image","tags":["javascript","image","rollup-plugin","rollup","vite","vite-compatible","compression","lossless","jpg","typescript"],"install":[{"cmd":"npm install rollup-plugin-napi-image","lang":"bash","label":"npm"},{"cmd":"yarn add rollup-plugin-napi-image","lang":"bash","label":"yarn"},{"cmd":"pnpm add rollup-plugin-napi-image","lang":"bash","label":"pnpm"}],"dependencies":[],"imports":[{"note":"Named export; default import does not exist.","wrong":"import napiImage from 'rollup-plugin-napi-image'","symbol":"napiImage","correct":"import { napiImage } from 'rollup-plugin-napi-image'"},{"note":"CommonJS require must destructure the named export.","wrong":"const napiImage = require('rollup-plugin-napi-image')","symbol":"napiImage","correct":"const { napiImage } = require('rollup-plugin-napi-image')"},{"note":"TypeScript type for mode option: 'lossy' | 'lossless'. Importing the type is optional but useful for typed config.","wrong":"","symbol":"Mode","correct":"import { Mode } from 'rollup-plugin-napi-image'"}],"quickstart":{"code":"// rollup.config.js\nimport { defineConfig } from 'rollup';\nimport { napiImage } from 'rollup-plugin-napi-image';\n\nexport default defineConfig({\n  input: 'src/index.js',\n  output: { dir: 'dist', format: 'esm' },\n  plugins: [\n    napiImage({\n      mode: 'lossy',\n      quality: 75,\n      include: ['**/*.{jpg,jpeg,png,webp,avif}'],\n      exclude: ['**/sprite.png'],\n      toModernExt: (ext) => ext === 'webp' ? 'avif' : ext,\n    }),\n  ],\n});","lang":"typescript","description":"Rollup config with napiImage plugin: lossy compression at quality 75, excluding sprite.png, and converting WebP to AVIF."},"warnings":[{"fix":"Pin version if stable: \"rollup-plugin-napi-image\": \"0.6.1\"","message":"Option format may change in future versions (e.g., include/exclude patterns).","severity":"deprecated","affected_versions":">=0.6.0"},{"fix":"Ensure production build runs image optimization separately or use manual rebuild.","message":"The plugin only runs during bundle build; it does not optimize images in watch mode or dev server by default.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Restrict return type to supported extensions.","message":"toModernExt function must return one of the supported extensions: 'jpg' | 'jpeg' | 'png' | 'webp' | 'avif'. Invalid return may cause build errors.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Update import to { napiImage } from 'rollup-plugin-napi-image'","message":"Previously named export was 'napiImagePlugin' in v0.5.x; renamed to 'napiImage' in v0.6.0.","severity":"breaking","affected_versions":"<0.6.0"},{"fix":"Upgrade Node.js to version 16 or higher, or use an older version of the plugin that supports Node 14.","message":"WARNING: The plugin requires Node.js >= 16 because of napi-rs dependencies.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Only set quality when mode is 'lossy'.","message":"The 'quality' option is currently only effective for lossy mode; setting it in lossless mode has no effect.","severity":"deprecated","affected_versions":">=0.0.0"},{"fix":"Use include/exclude patterns to filter out unsupported types.","message":"Unsupported file types (e.g., SVG, GIF) are silently ignored; no error is thrown.","severity":"gotcha","affected_versions":">=0.0.0"}],"env_vars":null,"last_verified":"2026-04-27T00:00:00.000Z","next_check":"2026-07-26T00:00:00.000Z","problems":[{"fix":"Run: npm install rollup-plugin-napi-image --save-dev","cause":"Package not installed or not in node_modules.","error":"Error: Cannot find module 'rollup-plugin-napi-image'"},{"fix":"Use: import { napiImage } from 'rollup-plugin-napi-image'","cause":"Default import used instead of named import.","error":"TypeError: napiImage is not a function"},{"fix":"Remove SVG files from the rollup pipeline or set include to only supported extensions.","cause":"Input file has an unsupported extension.","error":"Error: Unsupported image format: .svg"},{"fix":"Add mode: 'lossy' or 'lossless' to plugin options.","cause":"Missing mode in options.","error":"Plugin napiImage: The 'mode' option is required."},{"fix":"Ensure include patterns match only files, not directories.","cause":"The input path for an image is a directory instead of a file.","error":"Error: [plugin: napiImage] Could not optimize image. (code: ENOTDIR)"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}