From 9fdca9ee48d6d7f0a3a8673822bb3cb844103921 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Wed, 8 Jan 2025 22:19:19 -0500 Subject: [PATCH 1/3] Add a CLI to create new Parcel apps --- .eslintignore | 1 + gulpfile.js | 1 + .../react-static/src/ReactStaticPackager.js | 1 - packages/utils/create-parcel/package.json | 23 +++ .../utils/create-parcel/src/create-parcel.js | 190 ++++++++++++++++++ .../templates/react-client/.gitignore | 3 + .../templates/react-client/package.json | 19 ++ .../templates/react-client/src/App.css | 8 + .../templates/react-client/src/App.tsx | 10 + .../templates/react-client/src/index.html | 12 ++ .../templates/react-client/src/index.tsx | 11 + .../templates/react-client/tsconfig.json | 29 +++ .../templates/react-server/.gitignore | 3 + .../templates/react-server/package.json | 31 +++ .../templates/react-server/src/Counter.tsx | 11 + .../templates/react-server/src/Page.tsx | 28 +++ .../templates/react-server/src/actions.ts | 7 + .../templates/react-server/src/client.tsx | 95 +++++++++ .../templates/react-server/src/page.css | 15 ++ .../templates/react-server/src/server.tsx | 106 ++++++++++ .../templates/react-server/tsconfig.json | 29 +++ .../templates/react-server/types.d.ts | 23 +++ .../templates/react-server/yarn.lock | 0 .../templates/react-static/.gitignore | 3 + .../templates/react-static/.parcelrc | 3 + .../templates/react-static/package.json | 28 +++ .../templates/react-static/src/client.tsx | 73 +++++++ .../react-static/src/components/Counter.tsx | 11 + .../react-static/src/components/MDXLayout.tsx | 23 +++ .../react-static/src/components/Nav.css | 8 + .../react-static/src/components/Nav.tsx | 20 ++ .../templates/react-static/src/page.css | 13 ++ .../react-static/src/pages/index.tsx | 21 ++ .../templates/react-static/src/pages/mdx.mdx | 10 + .../templates/react-static/src/types.d.ts | 19 ++ .../templates/react-static/tsconfig.json | 29 +++ .../templates/vanilla/.gitignore | 3 + .../templates/vanilla/package.json | 14 ++ .../templates/vanilla/src/index.html | 13 ++ .../templates/vanilla/src/style.css | 8 + yarn.lock | 22 +- 41 files changed, 959 insertions(+), 18 deletions(-) create mode 100644 packages/utils/create-parcel/package.json create mode 100755 packages/utils/create-parcel/src/create-parcel.js create mode 100644 packages/utils/create-parcel/templates/react-client/.gitignore create mode 100644 packages/utils/create-parcel/templates/react-client/package.json create mode 100644 packages/utils/create-parcel/templates/react-client/src/App.css create mode 100644 packages/utils/create-parcel/templates/react-client/src/App.tsx create mode 100644 packages/utils/create-parcel/templates/react-client/src/index.html create mode 100644 packages/utils/create-parcel/templates/react-client/src/index.tsx create mode 100644 packages/utils/create-parcel/templates/react-client/tsconfig.json create mode 100644 packages/utils/create-parcel/templates/react-server/.gitignore create mode 100644 packages/utils/create-parcel/templates/react-server/package.json create mode 100644 packages/utils/create-parcel/templates/react-server/src/Counter.tsx create mode 100644 packages/utils/create-parcel/templates/react-server/src/Page.tsx create mode 100644 packages/utils/create-parcel/templates/react-server/src/actions.ts create mode 100644 packages/utils/create-parcel/templates/react-server/src/client.tsx create mode 100644 packages/utils/create-parcel/templates/react-server/src/page.css create mode 100644 packages/utils/create-parcel/templates/react-server/src/server.tsx create mode 100644 packages/utils/create-parcel/templates/react-server/tsconfig.json create mode 100644 packages/utils/create-parcel/templates/react-server/types.d.ts create mode 100644 packages/utils/create-parcel/templates/react-server/yarn.lock create mode 100644 packages/utils/create-parcel/templates/react-static/.gitignore create mode 100644 packages/utils/create-parcel/templates/react-static/.parcelrc create mode 100644 packages/utils/create-parcel/templates/react-static/package.json create mode 100644 packages/utils/create-parcel/templates/react-static/src/client.tsx create mode 100644 packages/utils/create-parcel/templates/react-static/src/components/Counter.tsx create mode 100644 packages/utils/create-parcel/templates/react-static/src/components/MDXLayout.tsx create mode 100644 packages/utils/create-parcel/templates/react-static/src/components/Nav.css create mode 100644 packages/utils/create-parcel/templates/react-static/src/components/Nav.tsx create mode 100644 packages/utils/create-parcel/templates/react-static/src/page.css create mode 100644 packages/utils/create-parcel/templates/react-static/src/pages/index.tsx create mode 100644 packages/utils/create-parcel/templates/react-static/src/pages/mdx.mdx create mode 100644 packages/utils/create-parcel/templates/react-static/src/types.d.ts create mode 100644 packages/utils/create-parcel/templates/react-static/tsconfig.json create mode 100644 packages/utils/create-parcel/templates/vanilla/.gitignore create mode 100644 packages/utils/create-parcel/templates/vanilla/package.json create mode 100644 packages/utils/create-parcel/templates/vanilla/src/index.html create mode 100644 packages/utils/create-parcel/templates/vanilla/src/style.css diff --git a/.eslintignore b/.eslintignore index 01d5ff711c7..4f9cf13a89f 100644 --- a/.eslintignore +++ b/.eslintignore @@ -11,6 +11,7 @@ packages/*/*/test/mochareporters.json packages/core/integration-tests/test/input/** packages/core/utils/test/input/** packages/utils/create-react-app/templates +packages/utils/create-parcel-app/templates packages/examples # Generated by the build diff --git a/gulpfile.js b/gulpfile.js index dd6ba06c6ef..9261be380b3 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -32,6 +32,7 @@ const paths = { packageJson: [ 'packages/core/parcel/package.json', 'packages/utils/create-react-app/package.json', + 'packages/utils/create-parcel/package.json', 'packages/dev/query/package.json', 'packages/dev/bundle-stats-cli/package.json', ], diff --git a/packages/packagers/react-static/src/ReactStaticPackager.js b/packages/packagers/react-static/src/ReactStaticPackager.js index 2af29e1dae9..94ae32ded94 100644 --- a/packages/packagers/react-static/src/ReactStaticPackager.js +++ b/packages/packagers/react-static/src/ReactStaticPackager.js @@ -264,7 +264,6 @@ async function loadBundleUncached( ]; }); } else if (entryBundle) { - // console.log('here', entryBundle) queue.add(async () => { let {assets: subAssets} = await loadBundle( entryBundle, diff --git a/packages/utils/create-parcel/package.json b/packages/utils/create-parcel/package.json new file mode 100644 index 00000000000..7f898c28740 --- /dev/null +++ b/packages/utils/create-parcel/package.json @@ -0,0 +1,23 @@ +{ + "name": "create-parcel", + "version": "2.13.3", + "bin": { + "create-parcel": "lib/create-parcel.js" + }, + "main": "src/create-parcel.js", + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git", + "directory": "packages/utils/create-parcel" + }, + "source": "src/create-parcel.js", + "files": [ + "templates", + "lib" + ], + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "dependencies": {} +} diff --git a/packages/utils/create-parcel/src/create-parcel.js b/packages/utils/create-parcel/src/create-parcel.js new file mode 100755 index 00000000000..03e159797c1 --- /dev/null +++ b/packages/utils/create-parcel/src/create-parcel.js @@ -0,0 +1,190 @@ +#!/usr/bin/env node + +// @flow +/* eslint-disable no-console */ + +// $FlowFixMe +import fs from 'fs/promises'; +import {readdirSync} from 'fs'; +import path from 'path'; +import {spawn as _spawn} from 'child_process'; +// $FlowFixMe +import {parseArgs, styleText} from 'util'; + +const supportsEmoji = isUnicodeSupported(); + +// Fallback symbols for Windows from https://en.wikipedia.org/wiki/Code_page_437 +const success: string = supportsEmoji ? '✨' : '√'; +const error: string = supportsEmoji ? '🚨' : '×'; + +const {positionals} = parseArgs({ + allowPositionals: true, + options: {}, +}); + +let template = positionals[0]; +if (!template) { + let packageManager = getCurrentPackageManager()?.name; + console.error( + `Usage: ${packageManager ?? 'npm'} create