Deploy a rust project to crates.io and npm in one command.
https://user-images.githubusercontent.com/8095978/176904499-ef3f5508-1143-491a-bf76-8f240e8b61fb.mov
Convert and deploy a rust application into a npm package that can be installed on all systems by leveraging cargo.
You need to have a valid license
set if you want to deploy to crates.io (we may auto fill it in the future).
sh
cargo install rust-to-npm
You may want to add the following to your .gitignore and just reference the project being made with.
package.json
package-lock.json
start.js
uninstall.js
pre-install.js
If you want the package to be private make sure to have private
set in your Cargo.toml file.
Run the command inside the repo with the Cargo.toml file to deploy to crates.io and npm.
```sh
rust-to-npm deploy
rust-to-npm build ```
To use the node_module you just published run npm i $PACKAGE_NAME
.
Then use it via node node node_modules/$PACKAGE_NAME/start.js
. Replace $PACKAGE_NAME
with your package name as kebab case.
You can also import the module directly at root as a normal module in js like require("node_modules/$PACKAGE_NAME")
.
npm
.pre-install
script that builds the rust project to the OS.start
script that executes the binary easily in nodejs.uninstall
script that removes the binary.crate
.
We have this working on another project, plan is to make this optional between crate
installs or local for size.Here is an example of the output from the Cargo.toml to package.json file in the repo.
```toml [package]
name = "rust-to-npm" version = "0.2.9" edition = "2021" description = "ship a rust project to npm on all operating systems leveraging cargo." repository = "https://github.com/a11ywatch/rust-to-npm" readme = "README.md" keywords = ["rust-to-npm", "deploy-rust", "npm", "rust"] categories = ["command-line-utilities", "development-tools::build-utils"] license = "MIT" homepage = "https://github.com/a11ywatch/rust-to-npm" authors = ["Jeff Mendez"]
[dependencies]
convertcase = "0.5.0" serde = { version = "1", features=["derive"]} serdederive = "1.0.137" toml = "0.5.9" ```
json
{
"name": "rust-to-npm",
"version": "0.2.9",
"description": "ship a rust project to npm on all operating systems leveraging cargo.",
"main": "start.js",
"directories": {
"test": "tests"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"postinstall": "node ./pre-install.js",
"uninstall": "node ./uninstall.js"
},
"repository": {
"type": "git",
"url": "https://github.com/a11ywatch/rust-to-npm.git"
},
"keywords": ["rust-to-npm", "deploy-rust", "npm", "rust"],
"author": "Jeff Mendez",
"license": "MIT",
"bugs": {
"url": "https://github.com/a11ywatch/rust-to-npm/issues"
},
"homepage": "https://github.com/a11ywatch/rust-to-npm",
"files": [
"pre-install.js",
"start.js",
"uninstall.js",
"README.md",
"LICENSE"
]
}
This project is used to convert the rust A11yWatch CLI for usage in node.
See example usage converting the rust crawler library as a sidecar into a node project.
We use this project to publish to npm as well.
node_module
imports like the crawler project.