A simple CLI/API tool to package and deploy prebuilt versions of node_modules packages to bypass gcc node-gyp issues. This is another level up from node-pre-gyp, if one of your target node_modules does not precompile, you can use this to bundle versions of that entire library.
Now rewrites package.json of target package to ensure it will not run node-gyp on future installs after it is deployed.
npm i -D prebuilt
npm i -g prebuilt
Pack an installed (and built) package from a VM:
prebuilt --pack package_name
# shorthand
prebuilt -p package_name
Install prebuilt packages on a machine, node version, platform and bitness will be handled automatically:
prebuilt --install package_name
# shorthand
prebuilt -i package_name
import { pack, install } from 'prebuilt'
import util from 'util'
const printResult = x => console.log(util.inspect(x))
const printError = err => console.error(err)
/** Pack an installed package for later distribution */
pack('package_name')
.then(printResult)
.catch(printError)
/** Install a prebuilt packed package */
install('package_name')
.then(printResult)
.catch(printError)
Unit tests output for current release:
prebuilt: rewriting C:\Users\ColeChamberlain\noderaider\prebuilt\node_modules\fake-package\package.json to remove node-gyp install step. running node-gyp clean for package at C:\Users\ColeChamberlain\noderaider\prebuilt\node_modules\fake-package running node-gyp configure for package at C:\Users\ColeChamberlain\noderaider\prebuilt\node_modules\fake-package running node-gyp build for package at C:\Users\ColeChamberlain\noderaider\prebuilt\node_modules\fake-package in debug mode running node-gyp build for package at C:\Users\ColeChamberlain\noderaider\prebuilt\node_modules\fake-package in release mode pack: node-gyp finished executing! prebuilt: rewriting C:\Users\ColeChamberlain\noderaider\prebuilt\node_modules\fake-package\package.json to remove node-gyp install step. running node-gyp clean for package at C:\Users\ColeChamberlain\noderaider\prebuilt\node_modules\fake-package running node-gyp configure for package at C:\Users\ColeChamberlain\noderaider\prebuilt\node_modules\fake-package running node-gyp build for package at C:\Users\ColeChamberlain\noderaider\prebuilt\node_modules\fake-package in debug mode running node-gyp build for package at C:\Users\ColeChamberlain\noderaider\prebuilt\node_modules\fake-package in release mode pack: node-gyp finished executing! extracting package at prebuilt/win32/x64/v6.2.2/invalid-package.7z to C:\Users\ColeChamberlain\noderaider\prebuilt\node_modules\invalid-package... extracting package at prebuilt/win32/x64/v6.2.2/fake-package.7z to C:\Users\ColeChamberlain\noderaider\prebuilt\node_modules\fake-package...
should exist.
return should.exist(lib);
should not have a default function export.
return should.not.exist(lib.default);
should exist.
return should.exist(pack);
should be a function.
return pack.should.be.a('function');
should not throw for non-existant package name.
return function () {
return pack().should.be.rejected;
}.should.not.throw();
should reject non-existant package name.
return pack().should.be.rejected;
should reject invalid package name.
return pack('invalid-package').should.be.rejected;
should pack valid package.
this.timeout(5000);
return pack('fake-package').should.be.fulfilled;
should create prebuilt.
this.timeout(5000);
pack('fake-package').then(function () {
return access(fakePackagePath);
}).catch(function (err) {
console.error(util.inspect(err));
should.not.exist(err);
}).finally(function () {
done();
});
should exist.
return should.exist(install);
should be a function.
return install.should.be.a('function');
should not throw for non-existant package name.
return function () {
return install().should.be.rejected;
}.should.not.throw();
should reject non-existant package name.
return install().should.be.rejected;
should reject invalid package name.
return install('invalid-package').should.be.rejected;
should install valid package.
return install('fake-package').should.be.fulfilled;