diff options
author | 2021-10-14 18:55:41 -0700 | |
---|---|---|
committer | 2021-10-14 18:55:41 -0700 | |
commit | bbc1bcbed125e4aeacac0c374f717f65adb838ea (patch) | |
tree | a3ae72a500afc507231d3f97c7d0762c76614a51 /examples | |
parent | 3ed824fe0fc14d21a5c035d84891b8ecf28e3c44 (diff) | |
download | bun-bbc1bcbed125e4aeacac0c374f717f65adb838ea.tar.gz bun-bbc1bcbed125e4aeacac0c374f717f65adb838ea.tar.zst bun-bbc1bcbed125e4aeacac0c374f717f65adb838ea.zip |
Support local templates
Diffstat (limited to 'examples')
-rw-r--r-- | examples/README.md | 109 | ||||
-rw-r--r-- | examples/react/package.json | 8 |
2 files changed, 7 insertions, 110 deletions
diff --git a/examples/README.md b/examples/README.md deleted file mode 100644 index 5b857090a..000000000 --- a/examples/README.md +++ /dev/null @@ -1,109 +0,0 @@ -# bun create - -`bun create` is a fast way to create a new project from a template. At the time of writing, `bun create react app` runs ~14x faster on my local computer than `yarn create react-app app`. `bun create` currently does no caching (though your npm client does) - -## Usage - -Templates are downloaded from folders inside `examples/` in Bun's GitHub repo. Running `bun create react ./local-path` downloads the `react` folder from `examples/react`. - -Create a new Next.js project: - -```bash -bun create next ./app` -``` - -Create a new React project: - -```bash -bun create react ./app -``` - -To see a list of available templates, run - -```bash -bun create -``` - -### Advanced - -| Flag | Description | -| ---------------------- | -------------------------------------- | -| --npm | Use `npm` for tasks & install | -| --yarn | Use `yarn` for tasks & install | -| --pnpm | Use `pnpm` for tasks & install | -| --force | Overwrite existing files | -| --no-install | Skip installing `node_modules` & tasks | -| --no-git | Don't initialize a git repository | -| ---------------------- | ----------------------------------- | - -By default, `bun create` will cancel if there are existing files it would overwrite. You can pass `--force` to disable this behavior. - -## Adding a new template - -Clone this repository and a new folder in `examples/` with your new template. The `package.json` must have a `name` that starts with `@bun-examples/`. Do not worry about publishing it, that will happen automaticallly after the PR is merged. - -Make sure to include a `.gitignore` that includes `node_modules` so that `node_modules` aren't checked in to git when people download the template. - -#### Testing your new template - -### Config - -The `bun-create` section of package.json is automatically removed from the `package.json` on disk. This lets you add create-only steps without waiting for an extra package to install. - -There are currently two options: - -- `postinstall` -- `preinstall` - -They can be an array of strings or one string. An array of steps will be executed in order. - -Here is an example: - -```json -{ - "name": "@bun-examples/next", - "version": "0.0.31", - "main": "index.js", - "dependencies": { - "next": "11.1.2", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-is": "^17.0.2" - }, - "devDependencies": { - "@types/react": "^17.0.19", - "bun-framework-next": "^0.0.0-21", - "typescript": "^4.3.5" - }, - "bun-create": { - "postinstall": ["bun bun --use next"] - } -} -``` - -By default, all commands run inside the environment exposed by the auto-detected npm client. This incurs a significant performance penalty, something like 150ms spent waiting for the npm client to start on each invocation. - -Any command that starts with `"bun "` will be run without npm, relying on the first `bun` binary in `$PATH`. - -## How `bun create` works - -When you run `bun create ${template} ${destination}`, here's what happens: - -1. GET `registry.npmjs.org/@bun-examples/${template}/latest` and parse it -2. GET `registry.npmjs.org/@bun-examples/${template}/-/${template}-${latestVersion}.tgz` -3. Decompress & extract `${template}-${latestVersion}.tgz` into `${destination}` - - - If there are files that would overwrite, warn and exit unless `--force` is passed - -4. Parse the `package.json` (again!), update `name` to be `${basename(destination)}`, remove the `bun-create` section from the `package.json` and save updated `package.json` to disk -5. Auto-detect the npm client, preferring `pnpm`, `yarn` (v1), and lastly `npm` -6. Run any tasks defined in `"bun-create": { "preinstall" }` with the npm client -7. Run `${npmClient} install` -8. Run any tasks defined in `"bun-create": { "preinstall" }` with the npm client -9. Run `git init; git add -A .; git commit -am "Initial Commit";`. - - - Rename `gitignore` to `.gitignore`. NPM automatically removes `.gitignore` files from appearing in packages. - -10. Done - -`../misctools/publish-examples.js` publishes all examples to npm. diff --git a/examples/react/package.json b/examples/react/package.json index fcf44635f..429a0b5aa 100644 --- a/examples/react/package.json +++ b/examples/react/package.json @@ -34,6 +34,12 @@ ] }, "devDependencies": { - "typescript": "^4.4.2" + "typescript": "^4.4.2", + "react-refresh": "^0.10.0" + }, + "bun-create": { + "postinstall": [ + "bun bun ./src/index.jsx" + ] } } |