parcel-bundler

安装量: 68
排名: #11206

安装

npx skills add https://github.com/mindrally/skills --skill parcel-bundler

Parcel Bundler

You are an expert in Parcel, the zero-configuration build tool for the web. Follow these guidelines when working with Parcel projects.

Core Principles Zero configuration by default - Parcel works out of the box Automatic dependency detection and installation Built-in development server with hot module replacement Native performance with Rust-based compiler Automatic code splitting and optimization Project Structure project/ ├── src/ │ ├── index.html # HTML entry point │ ├── index.js # JavaScript entry │ ├── styles.css # Stylesheets │ └── assets/ # Images, fonts, etc. ├── dist/ # Build output (auto-generated) ├── .parcelrc # Optional configuration └── package.json

Getting Started Basic Usage

Development with hot reload

parcel src/index.html

Production build

parcel build src/index.html

Package.json Scripts { "scripts": { "dev": "parcel src/index.html", "build": "parcel build src/index.html", "clean": "rm -rf dist .parcel-cache" }, "source": "src/index.html" }

Entry Points HTML Entry

<html> <head> <link rel="stylesheet" href="./styles.css"> </head> <body>
<script type="module" src="./index.js"></script> </body> </html>

JavaScript Entry parcel build src/index.js --dist-dir lib

Multiple Entry Points parcel build src/index.html src/admin.html

Supported Languages and File Types

Parcel supports out of the box:

JavaScript/TypeScript: .js, .jsx, .ts, .tsx, .mjs Styles: .css, .scss, .sass, .less, .styl HTML: .html, .htm Images: .png, .jpg, .gif, .svg, .webp Fonts: .woff, .woff2, .ttf, .otf, .eot Data: .json, .yaml, .toml, .xml WebAssembly: .wasm Configuration (When Needed) .parcelrc { "extends": "@parcel/config-default", "transformers": { "*.svg": ["@parcel/transformer-svg-react"] }, "reporters": ["...", "parcel-reporter-bundle-analyzer"] }

package.json Targets { "targets": { "main": { "source": "src/index.js", "distDir": "dist", "context": "browser", "outputFormat": "esm" } } }

TypeScript Support Automatic Configuration

Parcel handles TypeScript automatically. Just use .ts or .tsx files.

tsconfig.json { "compilerOptions": { "target": "ESNext", "module": "ESNext", "moduleResolution": "bundler", "jsx": "react-jsx", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "isolatedModules": true } }

React Support Automatic JSX // Parcel handles JSX automatically import { useState } from 'react';

function App() { const [count, setCount] = useState(0); return ; }

CSS and Styling CSS Imports import './styles.css';

CSS Modules import * as styles from './Button.module.css';

function Button() { return ; }

Sass/SCSS import './styles.scss';

Parcel installs sass automatically when you use .scss files.

Asset Handling Importing Assets import logo from './logo.png'; import data from './data.json';

// Use in JSX Logo

URL References const imageUrl = new URL('./image.png', import.meta.url);

Code Splitting Dynamic Imports // Automatic code splitting const LazyComponent = React.lazy(() => import('./LazyComponent'));

// Or manual async function loadModule() { const module = await import('./heavy-module.js'); return module.default; }

Shared Bundles

Parcel automatically creates shared bundles for code used across multiple entry points.

Environment Variables .env Files

.env

API_URL=https://api.example.com

.env.production

API_URL=https://api.production.com

Usage in Code const apiUrl = process.env.API_URL;

Defining in package.json { "targets": { "default": { "publicUrl": "/my-app/" } } }

Development Server Default Configuration parcel src/index.html

Serves at http://localhost:1234

Custom Port parcel src/index.html --port 3000

HTTPS parcel src/index.html --https

Proxy API Requests { "devServer": { "proxy": { "/api": { "target": "http://localhost:8080" } } } }

Production Build Basic Build parcel build src/index.html

Output Configuration parcel build src/index.html --dist-dir build --public-url /app/

No Source Maps parcel build src/index.html --no-source-maps

Optimization Automatic Optimizations

Parcel automatically:

Minifies JavaScript, CSS, HTML, and SVG Compresses images Generates content hashes for caching Tree-shakes unused code Scope hoists modules Bundle Analysis npm install -D parcel-reporter-bundle-analyzer

Add to .parcelrc

{ "extends": "@parcel/config-default", "reporters": ["...", "parcel-reporter-bundle-analyzer"] }

Caching

Parcel uses aggressive caching:

Clear cache

rm -rf .parcel-cache

Or

parcel build --no-cache

Plugin Development Plugin Types Transformers: Transform source files Resolvers: Custom module resolution Bundlers: Custom bundling logic Namers: Custom output naming Packagers: Package bundles Optimizers: Optimize bundles Reporters: Custom build reporting Plugin Rules Stateless: Avoid internal state Pure: Same input produces same output No side effects: Don't modify external state Library Development Package.json Configuration { "name": "my-library", "source": "src/index.ts", "main": "dist/main.js", "module": "dist/module.js", "types": "dist/types.d.ts", "targets": { "main": { "outputFormat": "commonjs" }, "module": { "outputFormat": "esmodule" }, "types": { "source": "src/index.ts" } } }

Best Practices Do Start with zero configuration Let Parcel handle asset optimization Use dynamic imports for code splitting Leverage automatic dependency installation Use CSS Modules for component styles Avoid Over-configuring when defaults work Fighting against Parcel's conventions Manually optimizing what Parcel handles Ignoring build warnings and errors Common Patterns Single Page Application

<html> <head> <meta charset="utf-8"> <title>My App</title> </head> <body>
<script type="module" src="./index.tsx"></script> </body> </html>

Static Site parcel build src/*.html

Web Worker const worker = new Worker(new URL('./worker.js', import.meta.url), { type: 'module' });

Troubleshooting Clear Cache rm -rf .parcel-cache dist

Verbose Output parcel build --log-level verbose

Debug Mode DEBUG=parcel:* parcel build

Migration from Other Bundlers Remove webpack.config.js or similar Remove loader/plugin dependencies Update import statements if needed Parcel will auto-install required dependencies

返回排行榜