12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- 'use strict';
- module.exports = exports = _package;
- exports.usage = 'Packs binary (and enclosing directory) into locally staged tarball';
- const fs = require('fs');
- const path = require('path');
- const log = require('npmlog');
- const versioning = require('./util/versioning.js');
- const napi = require('./util/napi.js');
- const existsAsync = fs.exists || path.exists;
- const makeDir = require('make-dir');
- const tar = require('tar');
- function readdirSync(dir) {
- let list = [];
- const files = fs.readdirSync(dir);
- files.forEach((file) => {
- const stats = fs.lstatSync(path.join(dir, file));
- if (stats.isDirectory()) {
- list = list.concat(readdirSync(path.join(dir, file)));
- } else {
- list.push(path.join(dir, file));
- }
- });
- return list;
- }
- function _package(gyp, argv, callback) {
- const package_json = gyp.package_json;
- const napi_build_version = napi.get_napi_build_version_from_command_args(argv);
- const opts = versioning.evaluate(package_json, gyp.opts, napi_build_version);
- const from = opts.module_path;
- const binary_module = path.join(from, opts.module_name + '.node');
- existsAsync(binary_module, (found) => {
- if (!found) {
- return callback(new Error('Cannot package because ' + binary_module + ' missing: run `node-pre-gyp rebuild` first'));
- }
- const tarball = opts.staged_tarball;
- const filter_func = function(entry) {
- const basename = path.basename(entry);
- if (basename.length && basename[0] !== '.') {
- console.log('packing ' + entry);
- return true;
- } else {
- console.log('skipping ' + entry);
- }
- return false;
- };
- makeDir(path.dirname(tarball)).then(() => {
- let files = readdirSync(from);
- const base = path.basename(from);
- files = files.map((file) => {
- return path.join(base, path.relative(from, file));
- });
- tar.create({
- portable: false,
- gzip: true,
- filter: filter_func,
- file: tarball,
- cwd: path.dirname(from)
- }, files, (err2) => {
- if (err2) console.error('[' + package_json.name + '] ' + err2.message);
- else log.info('package', 'Binary staged at "' + tarball + '"');
- return callback(err2);
- });
- }).catch((err) => {
- return callback(err);
- });
- });
- }
|