# 8pack

> 8pack ====================

Latest version **0.2.0** (published 2018-05-17) · ISC license · 0 weekly downloads

## Install

```sh
npm install 8pack
pnpm add 8pack
yarn add 8pack
bun add 8pack
```

Provides the command `8pack`.

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.2.0 |
| Published | 2018-05-17 |
| First published | 2018-02-18 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 3 |
| Unpacked size | 47.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | kepikoi |
| Maintainers | kepi |

## Links

- npm: https://www.npmjs.com/package/8pack
- npm.io page: https://npm.io/package/8pack

## Dependencies (3)

- [md5](https://npm.io/package/md5.md) ^2.2.1
- [chalk](https://npm.io/package/chalk.md) ^2.0.1
- [minimist](https://npm.io/package/minimist.md) ^1.2.0

## Recent versions

- 0.2.0 (latest) — 2018-05-17
- 0.1.1 — 2018-04-09
- 0.1.0 — 2018-04-09
- 0.0.3 — 2018-02-18
- 0.0.2 — 2018-02-18
- 0.0.1 — 2018-02-18

## README

8pack
====================

Utility that injects modular Lua source into a [PICO-8](https://www.lexaloffle.com/pico-8.php) project. 
---

## Installation
````bash
npm install 8pack -g
````

## Examples

Create *sample.lua.p8* from *sample.lua* using newest PICO-8 template
````bash
8pack tests/sample.lua
````

Inject *sample.lua* source into *foo.p8*. Will overwrite *foo.p8* if already exists.
````bash
8pack tests/sample.lua foo.p8  
````

Watch */tests/sample.lua* for changes and overwrite to */tests/sample.lua.p8*
````bash
8pack /tests/sample.lua -w  
````

Write */tests/sample.lua* source to */tests/foo.p8* using PICO-8 0.1.10c template 
````bash
8pack tests/sample.lua /tests/foo.p8 --template 0.1.10c
````

## Modules
Lua modules can be imported via ```require('./libs/lib')``` and will be injected to the top of the p8 file as global variables. 
Each module must return a table, variable or a function. Use node.js style path prefixes to access parent directories: ``require('../lib')``


*main.lua:*
```lua
local liba = require('./liba');

function _init()
    state = {
        hi = "hello world",
        i = 0,
        someFunct = function()
            return 1
        end,
        someOtherFunct = function()
            return 0
        end
    }
end

function _update60()
    state.i = state.i + rnd(liba.iterator);
end

function _draw()
    cls();
    print(liba.foo() .. ' ' .. state.i, 0, 116, 7);
end
```

*./liba.lua module:*
```lua
local lib = {
    foo = function()
        return 'hello world'
    end,
}
lib.iterator = 1

return lib;
```

Each injection is instantiated as a new function in pico8 code thus no code can be shared between modules.
As a workaround 8pack creates a ``globals`` table as the topmost variable inside the project which can be accessed from every module.

*./helpers.lua module:*
```lua
local helpers = {
    setLevel = function(level)
        globals.level = level
    end,
}

return lib;
```

*./game.lua module:*
```lua
return {
   nextLevel = function() 
     globals.level =  globals.level+1
     return globals.level
   end
} 
```

## JetBrains Watcher Arguments
Install 8pack globally and add 8pack bin as watcher with following arguments for on-the-fly injection 
````
$ProjectFileDir$/projectroot.lua $ProjectFileDir$/project.p8
````
e.g. for Lua watcher in PhpStorm 2017.3 on Windows 10 (I'm using the official Lua plugin)
![Screenshot](https://github.com/kepikoi/8pack/raw/master/screenshots/jetbrains.png)


## ToDos
* Circular dependancy checks 
* Module order checks
* Prevent pedundant imports
* Honor token limits
* Compress code

---
_Source: https://npm.io/package/8pack · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
