feat(documentation): Improve README with comprehensive installation, usage, and API reference details
This commit is contained in:
@ -1,5 +1,14 @@
|
||||
# Changelog
|
||||
|
||||
## 2025-06-26 - 2.5.0 - feat(documentation)
|
||||
Improve README with comprehensive installation, usage, and API reference details
|
||||
|
||||
- Updated installation instructions for both global and local setups
|
||||
- Added a quick start guide featuring CLI usage and API examples
|
||||
- Enhanced sections for available bundlers and specialized CLI commands
|
||||
- Expanded API reference with detailed examples for TsBundle, HtmlHandler, and AssetsHandler
|
||||
- Reorganized content to improve clarity and best practices guidance
|
||||
|
||||
## 2025-06-26 - 2.4.1 - fix(tests)
|
||||
Improve decorator tests and add LitElement component tests for better validation
|
||||
|
||||
|
337
readme.md
337
readme.md
@ -1,71 +1,304 @@
|
||||
# @git.zone/tsbundle
|
||||
a bundler using rollup for painless bundling of web projects
|
||||
|
||||
## Availabililty and Links
|
||||
* [npmjs.org (npm package)](https://www.npmjs.com/package/@git.zone/tsbundle)
|
||||
* [gitlab.com (source)](https://gitlab.com/gitzone/tsbundle)
|
||||
* [github.com (source mirror)](https://github.com/gitzone/tsbundle)
|
||||
* [docs (typedoc)](https://gitzone.gitlab.io/tsbundle/)
|
||||
A powerful multi-bundler tool supporting esbuild, rolldown, and rspack for painless bundling of web projects.
|
||||
|
||||
## Status for master
|
||||
## Installation
|
||||
|
||||
Status Category | Status Badge
|
||||
-- | --
|
||||
GitLab Pipelines | [](https://lossless.cloud)
|
||||
GitLab Pipline Test Coverage | [](https://lossless.cloud)
|
||||
npm | [](https://lossless.cloud)
|
||||
Snyk | [](https://lossless.cloud)
|
||||
TypeScript Support | [](https://lossless.cloud)
|
||||
node Support | [](https://nodejs.org/dist/latest-v10.x/docs/api/)
|
||||
Code Style | [](https://lossless.cloud)
|
||||
PackagePhobia (total standalone install weight) | [](https://lossless.cloud)
|
||||
PackagePhobia (package size on registry) | [](https://lossless.cloud)
|
||||
BundlePhobia (total size when bundled) | [](https://lossless.cloud)
|
||||
Platform support | [](https://lossless.cloud) [](https://lossless.cloud)
|
||||
|
||||
## Usage
|
||||
|
||||
Use TypeScript for best in class intellisense.
|
||||
|
||||
tsbundle will bundle modern JavaScript websites in an Google Bot conformant way so things like AdSense do work.
|
||||
|
||||
tsbundle supports two modes of usage: CLI and API usage.
|
||||
|
||||
### CLI
|
||||
|
||||
```shell
|
||||
# Note: This is code that belongs into your terminal ;)
|
||||
# Install the tool for cli usage
|
||||
|
||||
# Globally
|
||||
```bash
|
||||
# Global installation for CLI usage
|
||||
npm install -g @git.zone/tsbundle
|
||||
|
||||
# Locally for use in your pacakge.json
|
||||
# Local installation for project usage
|
||||
npm install --save-dev @git.zone/tsbundle
|
||||
|
||||
# then use it
|
||||
tsbundle --from="./ts/index.ts" --to="dist/bundle.js"
|
||||
|
||||
## note you can call tsbundle without arguments. Default values are --from="./ts_web/index.ts" --to="dist_bundle/bundle.js"
|
||||
## You can use --production to enable minification using terser
|
||||
```
|
||||
|
||||
## API
|
||||
## Quick Start
|
||||
|
||||
You are using TypeScript, aren't you? Most of the stuff is apparent from the IDE intellisense.
|
||||
### CLI Usage
|
||||
|
||||
The simplest way to bundle your project:
|
||||
|
||||
```bash
|
||||
# Bundle with default settings (from ./ts_web/index.ts to ./dist_bundle/bundle.js)
|
||||
tsbundle
|
||||
|
||||
# Bundle with custom paths
|
||||
tsbundle --from="./src/index.ts" --to="./dist/bundle.js"
|
||||
|
||||
# Production build with minification
|
||||
tsbundle --from="./src/index.ts" --to="./dist/bundle.js" --production
|
||||
|
||||
# Use a specific bundler
|
||||
tsbundle --bundler=rolldown
|
||||
```
|
||||
|
||||
### API Usage
|
||||
|
||||
```typescript
|
||||
import { TsBundle } from '@gitozne/tsbundle';
|
||||
import { TsBundle } from '@git.zone/tsbundle';
|
||||
|
||||
const myTsBundleInstance = new TsBundle();
|
||||
const bundler = new TsBundle();
|
||||
|
||||
const run = async () => {
|
||||
await myTsBundleInstance.buildTest('./from/my.ts', './to/mybundle.js');
|
||||
// OR
|
||||
await myTsBundleInstance.buildProduction('./from/my.ts', './to/mybundle.js');
|
||||
};
|
||||
// Basic usage
|
||||
await bundler.build(
|
||||
process.cwd(), // working directory
|
||||
'./src/index.ts', // entry point
|
||||
'./dist/bundle.js', // output file
|
||||
{ bundler: 'esbuild' } // options
|
||||
);
|
||||
|
||||
// Production build with rolldown
|
||||
await bundler.build(
|
||||
process.cwd(),
|
||||
'./src/index.ts',
|
||||
'./dist/bundle.min.js',
|
||||
{
|
||||
bundler: 'rolldown',
|
||||
production: true
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
## Available Bundlers
|
||||
|
||||
tsbundle supports three modern bundlers, each with its own strengths:
|
||||
|
||||
- **esbuild** (default): Extremely fast, great for development
|
||||
- **rolldown**: Rust-based bundler with excellent tree-shaking
|
||||
- **rspack**: High-performance bundler with webpack compatibility
|
||||
|
||||
Select your bundler using the `--bundler` flag in CLI or the `bundler` option in API.
|
||||
|
||||
## CLI Commands
|
||||
|
||||
### Default Command
|
||||
|
||||
Bundle TypeScript/JavaScript projects:
|
||||
|
||||
```bash
|
||||
tsbundle [options]
|
||||
|
||||
Options:
|
||||
--from Source entry point (default: ./ts_web/index.ts)
|
||||
--to Output bundle path (default: ./dist_bundle/bundle.js)
|
||||
--production Enable production mode with minification
|
||||
--bundler Choose bundler: esbuild, rolldown, or rspack
|
||||
--commonjs Output CommonJS format instead of ESM
|
||||
--skiplibcheck Skip TypeScript library checking
|
||||
```
|
||||
|
||||
### Specialized Commands
|
||||
|
||||
#### `tsbundle element`
|
||||
|
||||
Bundle web components with standard naming conventions:
|
||||
|
||||
```bash
|
||||
tsbundle element
|
||||
# Bundles from ./ts_web/elements/<elementName>.ts to ./dist_bundle/bundle.js
|
||||
```
|
||||
|
||||
#### `tsbundle npm`
|
||||
|
||||
Bundle npm packages for distribution:
|
||||
|
||||
```bash
|
||||
tsbundle npm
|
||||
# Prepares your package for npm publishing
|
||||
```
|
||||
|
||||
#### `tsbundle website`
|
||||
|
||||
Full website bundling with HTML processing and asset handling:
|
||||
|
||||
```bash
|
||||
tsbundle website
|
||||
# Bundles JavaScript, processes HTML, and copies assets
|
||||
```
|
||||
|
||||
## API Reference
|
||||
|
||||
### TsBundle Class
|
||||
|
||||
The main bundler class for programmatic usage.
|
||||
|
||||
```typescript
|
||||
import { TsBundle } from '@git.zone/tsbundle';
|
||||
|
||||
const bundler = new TsBundle();
|
||||
|
||||
// Method signature
|
||||
await bundler.build(
|
||||
cwdArg: string, // Working directory
|
||||
fromArg?: string, // Entry point (default: './ts_web/index.ts')
|
||||
toArg?: string, // Output path (default: './dist_bundle/bundle.js')
|
||||
argvArg?: ICliOptions // Configuration options
|
||||
): Promise<void>
|
||||
```
|
||||
|
||||
#### ICliOptions Interface
|
||||
|
||||
```typescript
|
||||
interface ICliOptions {
|
||||
bundler: 'esbuild' | 'rolldown' | 'rspack'; // Bundler to use
|
||||
production?: boolean; // Enable production optimizations
|
||||
commonjs?: boolean; // Output CommonJS format
|
||||
skiplibcheck?: boolean; // Skip TypeScript lib checking
|
||||
}
|
||||
```
|
||||
|
||||
### HtmlHandler Class
|
||||
|
||||
Process and minify HTML files:
|
||||
|
||||
```typescript
|
||||
import { HtmlHandler } from '@git.zone/tsbundle';
|
||||
|
||||
const htmlHandler = new HtmlHandler();
|
||||
|
||||
// Check if HTML files exist
|
||||
const exists = await htmlHandler.checkIfExists();
|
||||
|
||||
// Process HTML with options
|
||||
await htmlHandler.processHtml({
|
||||
from: './src/index.html', // Source HTML (default: './html/index.html')
|
||||
to: './dist/index.html', // Output HTML (default: './dist_serve/index.html')
|
||||
minify: true // Enable minification
|
||||
});
|
||||
```
|
||||
|
||||
### AssetsHandler Class
|
||||
|
||||
Handle static assets (images, fonts, etc.):
|
||||
|
||||
```typescript
|
||||
import { AssetsHandler } from '@git.zone/tsbundle';
|
||||
|
||||
const assetsHandler = new AssetsHandler();
|
||||
|
||||
// Ensure assets directory exists
|
||||
await assetsHandler.ensureAssetsDir();
|
||||
|
||||
// Copy and process assets
|
||||
await assetsHandler.processAssets({
|
||||
from: './src/assets', // Source directory (default: './assets')
|
||||
to: './dist/assets' // Output directory (default: './dist_serve/assets')
|
||||
});
|
||||
```
|
||||
|
||||
## Advanced Examples
|
||||
|
||||
### Building a Modern Web Application
|
||||
|
||||
```typescript
|
||||
import { TsBundle, HtmlHandler, AssetsHandler } from '@git.zone/tsbundle';
|
||||
|
||||
async function buildWebApp() {
|
||||
const bundler = new TsBundle();
|
||||
const htmlHandler = new HtmlHandler();
|
||||
const assetsHandler = new AssetsHandler();
|
||||
|
||||
// Bundle the JavaScript
|
||||
await bundler.build(
|
||||
process.cwd(),
|
||||
'./src/app.ts',
|
||||
'./dist/app.js',
|
||||
{
|
||||
bundler: 'rolldown',
|
||||
production: true
|
||||
}
|
||||
);
|
||||
|
||||
// Process HTML
|
||||
await htmlHandler.processHtml({
|
||||
from: './src/index.html',
|
||||
to: './dist/index.html',
|
||||
minify: true
|
||||
});
|
||||
|
||||
// Copy assets
|
||||
await assetsHandler.processAssets({
|
||||
from: './src/assets',
|
||||
to: './dist/assets'
|
||||
});
|
||||
|
||||
console.log('Build complete!');
|
||||
}
|
||||
|
||||
buildWebApp();
|
||||
```
|
||||
|
||||
### Multi-Entry Point Bundling
|
||||
|
||||
```typescript
|
||||
import { TsBundle } from '@git.zone/tsbundle';
|
||||
|
||||
async function buildMultipleEntries() {
|
||||
const bundler = new TsBundle();
|
||||
const entries = [
|
||||
{ from: './src/main.ts', to: './dist/main.js' },
|
||||
{ from: './src/admin.ts', to: './dist/admin.js' },
|
||||
{ from: './src/worker.ts', to: './dist/worker.js' }
|
||||
];
|
||||
|
||||
for (const entry of entries) {
|
||||
await bundler.build(
|
||||
process.cwd(),
|
||||
entry.from,
|
||||
entry.to,
|
||||
{ bundler: 'esbuild' }
|
||||
);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Development vs Production Builds
|
||||
|
||||
```typescript
|
||||
import { TsBundle } from '@git.zone/tsbundle';
|
||||
|
||||
const bundler = new TsBundle();
|
||||
const isDev = process.env.NODE_ENV === 'development';
|
||||
|
||||
await bundler.build(
|
||||
process.cwd(),
|
||||
'./src/index.ts',
|
||||
isDev ? './dist/dev/bundle.js' : './dist/prod/bundle.min.js',
|
||||
{
|
||||
bundler: isDev ? 'esbuild' : 'rolldown', // esbuild for speed in dev
|
||||
production: !isDev, // minify in production
|
||||
commonjs: false // use ES modules
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
## TypeScript Configuration
|
||||
|
||||
tsbundle works best with the following TypeScript configuration:
|
||||
|
||||
```json
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2022",
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "node",
|
||||
"esModuleInterop": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"strict": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Entry Points**: Keep your entry points in `ts_web/` for web bundles or `ts/` for library bundles
|
||||
2. **Output Structure**: Use `dist_bundle/` for bundled files and `dist_serve/` for web-ready files
|
||||
3. **Bundler Selection**:
|
||||
- Use `esbuild` for development (fastest)
|
||||
- Use `rolldown` or `rspack` for production (better optimization)
|
||||
4. **Assets**: Place static assets in the `assets/` directory
|
||||
5. **HTML**: Keep HTML templates in the `html/` directory
|
||||
|
||||
## Contribution
|
||||
|
||||
We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :)
|
||||
|
@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@git.zone/tsbundle',
|
||||
version: '2.4.1',
|
||||
version: '2.5.0',
|
||||
description: 'a multi-bundler tool supporting esbuild, rolldown, and rspack for painless bundling of web projects'
|
||||
}
|
||||
|
Reference in New Issue
Block a user