Commit 76a30a5e3ddb147561acebedc6dca944db047e6e

Authored by Georg Hopp
1 parent e1aef2c6

npm init wasm-app www

  1 +#!/usr/bin/env node
  2 +
  3 +const { spawn } = require("child_process");
  4 +const fs = require("fs");
  5 +
  6 +let folderName = '.';
  7 +
  8 +if (process.argv.length >= 3) {
  9 + folderName = process.argv[2];
  10 + if (!fs.existsSync(folderName)) {
  11 + fs.mkdirSync(folderName);
  12 + }
  13 +}
  14 +
  15 +const clone = spawn("git", ["clone", "https://github.com/rustwasm/create-wasm-app.git", folderName]);
  16 +
  17 +clone.on("close", code => {
  18 + if (code !== 0) {
  19 + console.error("cloning the template failed!")
  20 + process.exit(code);
  21 + } else {
  22 + console.log("🦀 Rust + 🕸 Wasm = ❤");
  23 + }
  24 +});
... ...
  1 +<div align="center">
  2 +
  3 + <h1><code>create-wasm-app</code></h1>
  4 +
  5 + <strong>An <code>npm init</code> template for kick starting a project that uses NPM packages containing Rust-generated WebAssembly and bundles them with Webpack.</strong>
  6 +
  7 + <p>
  8 + <a href="https://travis-ci.org/rustwasm/create-wasm-app"><img src="https://img.shields.io/travis/rustwasm/create-wasm-app.svg?style=flat-square" alt="Build Status" /></a>
  9 + </p>
  10 +
  11 + <h3>
  12 + <a href="#usage">Usage</a>
  13 + <span> | </span>
  14 + <a href="https://discordapp.com/channels/442252698964721669/443151097398296587">Chat</a>
  15 + </h3>
  16 +
  17 + <sub>Built with 🦀🕸 by <a href="https://rustwasm.github.io/">The Rust and WebAssembly Working Group</a></sub>
  18 +</div>
  19 +
  20 +## About
  21 +
  22 +This template is designed for depending on NPM packages that contain
  23 +Rust-generated WebAssembly and using them to create a Website.
  24 +
  25 +* Want to create an NPM package with Rust and WebAssembly? [Check out
  26 + `wasm-pack-template`.](https://github.com/rustwasm/wasm-pack-template)
  27 +* Want to make a monorepo-style Website without publishing to NPM? Check out
  28 + [`rust-webpack-template`](https://github.com/rustwasm/rust-webpack-template)
  29 + and/or
  30 + [`rust-parcel-template`](https://github.com/rustwasm/rust-parcel-template).
  31 +
  32 +## 🚴 Usage
  33 +
  34 +```
  35 +npm init wasm-app
  36 +```
  37 +
  38 +## 🔋 Batteries Included
  39 +
  40 +- `.gitignore`: ignores `node_modules`
  41 +- `LICENSE-APACHE` and `LICENSE-MIT`: most Rust projects are licensed this way, so these are included for you
  42 +- `README.md`: the file you are reading now!
  43 +- `index.html`: a bare bones html document that includes the webpack bundle
  44 +- `index.js`: example js file with a comment showing how to import and use a wasm pkg
  45 +- `package.json` and `package-lock.json`:
  46 + - pulls in devDependencies for using webpack:
  47 + - [`webpack`](https://www.npmjs.com/package/webpack)
  48 + - [`webpack-cli`](https://www.npmjs.com/package/webpack-cli)
  49 + - [`webpack-dev-server`](https://www.npmjs.com/package/webpack-dev-server)
  50 + - defines a `start` script to run `webpack-dev-server`
  51 +- `webpack.config.js`: configuration file for bundling your js with webpack
  52 +
  53 +## License
  54 +
  55 +Licensed under either of
  56 +
  57 +* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
  58 +* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
  59 +
  60 +at your option.
  61 +
  62 +### Contribution
  63 +
  64 +Unless you explicitly state otherwise, any contribution intentionally
  65 +submitted for inclusion in the work by you, as defined in the Apache-2.0
  66 +license, shall be dual licensed as above, without any additional terms or
  67 +conditions.
... ...
  1 +// A dependency graph that contains any wasm must all be imported
  2 +// asynchronously. This `bootstrap.js` file does the single async import, so
  3 +// that no one else needs to worry about it again.
  4 +import("./index.js")
  5 + .catch(e => console.error("Error importing `index.js`:", e));
... ...
  1 +<!DOCTYPE html>
  2 +<html>
  3 + <head>
  4 + <meta charset="utf-8">
  5 + <title>Hello wasm-pack!</title>
  6 + </head>
  7 + <body>
  8 + <noscript>This page contains webassembly and javascript content, please enable javascript in your browser.</noscript>
  9 + <script src="./bootstrap.js"></script>
  10 + </body>
  11 +</html>
... ...
  1 +import * as wasm from "hello-wasm-pack";
  2 +
  3 +wasm.greet();
... ...
This diff could not be displayed because it is too large.
  1 +{
  2 + "name": "create-wasm-app",
  3 + "version": "0.1.0",
  4 + "description": "create an app to consume rust-generated wasm packages",
  5 + "main": "index.js",
  6 + "bin": {
  7 + "create-wasm-app": ".bin/create-wasm-app.js"
  8 + },
  9 + "scripts": {
  10 + "build": "webpack --config webpack.config.js",
  11 + "start": "webpack-dev-server"
  12 + },
  13 + "repository": {
  14 + "type": "git",
  15 + "url": "git+https://github.com/rustwasm/create-wasm-app.git"
  16 + },
  17 + "keywords": [
  18 + "webassembly",
  19 + "wasm",
  20 + "rust",
  21 + "webpack"
  22 + ],
  23 + "author": "Ashley Williams <ashley666ashley@gmail.com>",
  24 + "license": "(MIT OR Apache-2.0)",
  25 + "bugs": {
  26 + "url": "https://github.com/rustwasm/create-wasm-app/issues"
  27 + },
  28 + "homepage": "https://github.com/rustwasm/create-wasm-app#readme",
  29 + "devDependencies": {
  30 + "hello-wasm-pack": "^0.1.0",
  31 + "webpack": "^4.29.3",
  32 + "webpack-cli": "^3.1.0",
  33 + "webpack-dev-server": "^3.1.5",
  34 + "copy-webpack-plugin": "^5.0.0"
  35 + }
  36 +}
... ...
  1 +const CopyWebpackPlugin = require("copy-webpack-plugin");
  2 +const path = require('path');
  3 +
  4 +module.exports = {
  5 + entry: "./bootstrap.js",
  6 + output: {
  7 + path: path.resolve(__dirname, "dist"),
  8 + filename: "bootstrap.js",
  9 + },
  10 + mode: "development",
  11 + plugins: [
  12 + new CopyWebpackPlugin(['index.html'])
  13 + ],
  14 +};
... ...
Please register or login to post a comment