UNPKG

tic-bundle

Version:
198 lines (145 loc) 4.45 kB
![tic-bundle logo](https://i.imgur.com/YpexCm4.png) [![license GPLv3](https://img.shields.io/badge/license-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![npm](https://img.shields.io/npm/v/tic-bundle?label=npm)](https://www.npmjs.com/package/tic-bundle) [![ci](https://github.com/chronoDave/tic-bundle/actions/workflows/ci.yml/badge.svg)](https://github.com/chronoDave/tic-bundle/actions/workflows/ci.yml) # tic-bundle Simple CLI tool for bundling [TIC-80](https://tic80.com/) cartridge code. Supports any language! ## Content - [Installation](#installation) - [Example](#example) - [CLI](#cli) - [Configuration](#configuration) - [Options](#options) - [Babel](#babel) - [License](./LICENSE) - [Donating](#donating) ## Installation ``` // Yarn yarn add tic-bundle --dev // Npm npm i tic-bundle --save-dev ``` ## Example <b>Config</b> ```JSON { "files": ["ui.js", "main.js"], "assets": ["assets.js"] } ``` <b>Input</b> `src/main.js` ```JS function TIC() { }; // <TILES> // 000:0100000010100000010000000000000000000000000000000000000000000000 // </TILES> ``` `src/ui.js` ```JS function ui() { return 'ui'; }; ``` `src/assets.js` ```JS // script: js // <TILES> // 000:0100000010100000010000000000000000000000000000000000000000000000 // </TILES> ``` <b>Output</b> `build.js` ```JS // script: js function ui() { return 'ui'; }; function TIC() { }; // <TILES> // 000:0100000010100000010000000000000000000000000000000000000000000000 // </TILES> ``` ## CLI `package.json` ```JSON { "scripts": { "watch": "tic-bundle" } } ``` <b>CLI options</b> - `-r / --root` - Root folder - `-w / --wait` - Wait interval - `-c / --config` - Path to config file - `-o / --output` - Bundled file output path - `-n / --name` - Bundle file name - `-f / --file` - Bundle file extension - `-s / --script` - Language - `-b / --build` - Build ## Configuration `tic-bundle` supports config files. By default, `tic-bundle` looks for a `.ticbundle.js` file in the current directory, but an alternative location can be specified using `-c <file>` or `--config <file>`. The specificity is as folows: - `.ticbundle.js` - `.ticbundle.json` - CLI - Default config <b>Default config</b> ```JS { root: 'src', wait: 200, metadata: { title: null, author: null, desc: null, script: 'js', input: null, saveid: null }, output: { path: './', extension: 'js', name: 'build' }, files: [], assets: [], after: null } ``` ### Options - `root` (default `src`) - Folder to watch. - `wait` (default `200`) - [Chokidar awaitWriteFinish.stabilityThreshold](https://github.com/paulmillr/chokidar#performance) - `metadata` - [Cartridge metadata](https://github.com/nesbox/TIC-80/wiki#cartridge-metadata) - `metadata.title` - The name of the cart. - `metadata.author` - The name of the developer. - `metadata.description` - Optional description of the game. - `metadata.script` (default `js`) - Used scripting language. - `metadata.input` - Selects gamepad, mouse or keyboard input source. - `metadata.saveid` - Allows save data to be shared within multiple games on a copy of TIC. - `output.path` (default `./`) - Bundled file output path. - `output.extension` (default `js`) - Bundle file output extension - `output.name` (default `build`) - Bundled file name. - `files` - Files to bundle. Asset data will be stripped (graphics data, sprite data, etc.) Files will be ordered by index (top first, bottom last). - `assets` - Assets to bundle. Code data will be stripped. Assets will be ordered by index (top first, bottom last) and are always places below `files`. - `after` - Run after generating the bundle, this can be used to further modify the bundle. ### Babel `after` can be used to transform the bundled code. A common use-case for `js` is transforming `ES6` syntax to `ES5`. <b>Example</b> `.ticbundle.js` ```JS module.exports = { after: bundle => { const { code } = require('@babel/standalone').transform(bundle, { plugins: [require('@babel/plugin-transform-arrow-functions')] }); return code; } }; ``` ## Donating [![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/Y8Y41E23T)