https://github.com/yashladha/pngcompressor
png compression from nodejs using rust π¦
https://github.com/yashladha/pngcompressor
Last synced: 2 months ago
JSON representation
png compression from nodejs using rust π¦
- Host: GitHub
- URL: https://github.com/yashladha/pngcompressor
- Owner: yashLadha
- Created: 2021-06-10T16:10:22.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2021-06-11T14:58:51.000Z (almost 4 years ago)
- Last Synced: 2025-01-28T15:16:01.174Z (4 months ago)
- Language: Rust
- Size: 9.77 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# pngcompressor
**pngcompressor:** fast png compressing using oxipng
This project was bootstrapped by [create-neon](https://www.npmjs.com/package/create-neon).
## Installing pngcompressor
Installing pngcompressor requires a [supported version of Node and Rust](https://github.com/neon-bindings/neon#platform-support).
You can install the project with npm. In the project directory, run:
```sh
$ npm install
```This fully installs the project, including installing any dependencies and running the build.
## Building pngcompressor
If you have already installed the project and only want to run the build, run:
```sh
$ npm run build
```This command uses the [cargo-cp-artifact](https://github.com/neon-bindings/cargo-cp-artifact) utility to run the Rust build and copy the built library into `./index.node`.
## Exploring pngcompressor
After building pngcompressor, you can explore its exports at the Node REPL:
```sh
$ npm install
$ node
> require('.').compress([{ in: "input_png_file_path", out: "output_png_file_path" }])
```By default it will try to chunk the complete array using `8` threads but it can
be configurable using the env variable `PNG_COMPRESS_THREADS`.## Available Scripts
In the project directory, you can run:
### `npm install`
Installs the project, including running `npm run build`.
### `npm build`
Builds the Node addon (`index.node`) from source.
### `npm test`
Runs the unit tests by calling `cargo test`. You can learn more about [adding tests to your Rust code](https://doc.rust-lang.org/book/ch11-01-writing-tests.html) from the [Rust book](https://doc.rust-lang.org/book/).
## Project Layout
The directory structure of this project is:
```
pngcompressor/
βββ Cargo.toml
βββ README.md
βββ index.node
βββ package.json
βββ src/
| βββ lib.rs
βββ target/
```### Cargo.toml
The Cargo [manifest file](https://doc.rust-lang.org/cargo/reference/manifest.html), which informs the `cargo` command.
### README.md
This file.
### index.node
The Node addonβi.e., a binary Node moduleβgenerated by building the project. This is the main module for this package, as dictated by the `"main"` key in `package.json`.
Under the hood, a [Node addon](https://nodejs.org/api/addons.html) is a [dynamically-linked shared object](https://en.wikipedia.org/wiki/Library_(computing)#Shared_libraries). The `"build"` script produces this file by copying it from within the `target/` directory, which is where the Rust build produces the shared object.
### package.json
The npm [manifest file](https://docs.npmjs.com/cli/v7/configuring-npm/package-json), which informs the `npm` command.
### src/
The directory tree containing the Rust source code for the project.
### src/lib.rs
The Rust library's main module.
### target/
Binary artifacts generated by the Rust build.
## Learn More
To learn more about Neon, see the [Neon documentation](https://neon-bindings.com).
To learn more about Rust, see the [Rust documentation](https://www.rust-lang.org).
To learn more about Node, see the [Node documentation](https://nodejs.org).