Create OSX flat packages (.pkg) with pure JS.
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.
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')
})
})
Returns a readable stream that you can read the finished Installer from.
-
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)
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
.
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 "/")
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.
Pack the Payload in the cpio format.
Create the Bill of Materials files for the contents
Flatten the package with xar.