@octoblu/osx-pkg

    1.1.0 • Public • Published

    osx-pkg

    NPM

    Create OSX flat packages (.pkg) with pure JS.

    example

    var osxpkg = require('osx-pkg')
    var fs = require('fs')
     
    var opts = {
      dir: './root' // the contents of this dir will be installed in installLocation
      installLocation: '/Applications'
      identifier: 'org.myorg.myapp.pkg',
      title: 'MyApp',
      version: '1.0.0'
    }
     
    osxpkg(opts)
     .pipe(fs.createWriteStream('Installer.pkg'))

    The packaging is not done in a complete streaming fashion, but a temporary folder will be used.

    example with multiple components

    var osxpkg = require('osx-pkg')
    var fs = require('fs')
     
    var pkgDir = './out'
     
    fs.mkdirSync(pkgDir)
     
    osxpkg.addComponent(pkgDir, './build/CoolApp.app', {...}, function (err) {
      if (err) return console.error(err)
      osxpkg.addComponent(pkgDir, './build/CoolAppCompanion.app', {...}, function (err) {
        if (err) return console.error(err)
        osxpkg.addDistribution(pkgDir, function (err) {
          if (err) return console.error(err)
          oskpkg.pack(pkgDir).pipe(fs.createWriteStream('Installer.pkg'))
        })
        console.log('DONE')
      })
    })
     
     

    API

    osxpkg(opts)

    Returns a readable stream that you can read the finished Installer from.

    Options

    • dir Path to a directory whose contents are going to be installed in installLocation

    • identifier Identifier for your package, e.g. org.myorg.myapp.pkg

    • title The Title of your package

    • installLocation (defaults to /)

    • tmpDir The unpackaged pkg will be created here (defaults to a newly created directory in the tmp dir)

    osxpkg.addComponent(inDir, outDir, opts, cb)

    The final .pkg is just a xar archived directory with the following structure:

    Installer.pkg
    - Distribution
    - component1.pkg
      - Bom
      - Payload
      - PackageInfo
    - component2.pkg
      - Bom
      - Payload
      - PackageInfo
    - Resources (optional)
    

    These components are actually called packages as well. But I am calling them components to not confuse them with the resulting package...

    Given an inDir and an outDir, this function will package the contents of inDir as a component and add it to outDir. So it allows to add multiple components to an installer before creating the Distribution file and finalizing it with xar.

    CLI

    This modules ships with a CLI:

    osx-pkg <inputdir>
    Packages <inputdir> as an osx flat package to stdout
        options
        --identifier Identifier for your package
        --title Title of your package
        --location Install location (default "/")
    

    Modules

    You can also create your pkg files by using the components of this modules. Here are 3 modules that are essential for creating an OSX flat package.

    cpio-fs

    Pack the Payload in the cpio format.

    mkbom

    Create the Bill of Materials files for the contents

    xar

    Flatten the package with xar.

    Install

    npm i @octoblu/osx-pkg

    DownloadsWeekly Downloads

    0

    Version

    1.1.0

    License

    MIT

    Last publish

    Collaborators

    • sqrtofsaturn
    • royvandewater
    • peterdemartini
    • chrismatthieu
    • iamruinous
    • octoblu-user