8pack

8pack ====================

Stats

stars 🌟issues ⚠️updated 🛠created 🐣size 🏋️‍♀️
8pack
Minified + gzip package size for 8pack in KB

Readme

8pack

Utility that injects modular Lua source into a PICO-8 project.

Installation

npm install 8pack -g

Examples

Create sample.lua.p8 from sample.lua using newest PICO-8 template

8pack tests/sample.lua

Inject sample.lua source into foo.p8. Will overwrite foo.p8 if already exists.

8pack tests/sample.lua foo.p8  

Watch /tests/sample.lua for changes and overwrite to /tests/sample.lua.p8

8pack /tests/sample.lua -w  

Write /tests/sample.lua source to /tests/foo.p8 using PICO-8 0.1.10c template

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:

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:

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:

local helpers = {
    setLevel = function(level)
        globals.level = level
    end,
}

return lib;

./game.lua module:

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

ToDos

  • Circular dependancy checks
  • Module order checks
  • Prevent pedundant imports
  • Honor token limits
  • Compress code

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.