asar.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/usr/bin/env node
  2. var packageJSON = require('../package.json')
  3. var splitVersion = function (version) { return version.split('.').map(function (part) { return Number(part) }) }
  4. var requiredNodeVersion = splitVersion(packageJSON.engines.node.slice(2))
  5. var actualNodeVersion = splitVersion(process.versions.node)
  6. if (actualNodeVersion[0] < requiredNodeVersion[0] || (actualNodeVersion[0] === requiredNodeVersion[0] && actualNodeVersion[1] < requiredNodeVersion[1])) {
  7. console.error('CANNOT RUN WITH NODE ' + process.versions.node)
  8. console.error('asar requires Node ' + packageJSON.engines.node + '.')
  9. process.exit(1)
  10. }
  11. // Not consts so that this file can load in Node < 4.0
  12. var asar = require('../lib/asar')
  13. var program = require('commander')
  14. program.version('v' + packageJSON.version)
  15. .description('Manipulate asar archive files')
  16. program.command('pack <dir> <output>')
  17. .alias('p')
  18. .description('create asar archive')
  19. .option('--ordering <file path>', 'path to a text file for ordering contents')
  20. .option('--unpack <expression>', 'do not pack files matching glob <expression>')
  21. .option('--unpack-dir <expression>', 'do not pack dirs matching glob <expression> or starting with literal <expression>')
  22. .option('--exclude-hidden', 'exclude hidden files')
  23. .action(function (dir, output, options) {
  24. options = {
  25. unpack: options.unpack,
  26. unpackDir: options.unpackDir,
  27. ordering: options.ordering,
  28. version: options.sv,
  29. arch: options.sa,
  30. builddir: options.sb,
  31. dot: !options.excludeHidden
  32. }
  33. asar.createPackageWithOptions(dir, output, options).catch(error => {
  34. console.error(error)
  35. process.exit(1)
  36. })
  37. })
  38. program.command('list <archive>')
  39. .alias('l')
  40. .description('list files of asar archive')
  41. .option('-i, --is-pack', 'each file in the asar is pack or unpack')
  42. .action(function (archive, options) {
  43. options = {
  44. isPack: options.isPack
  45. }
  46. var files = asar.listPackage(archive, options)
  47. for (var i in files) {
  48. console.log(files[i])
  49. }
  50. })
  51. program.command('extract-file <archive> <filename>')
  52. .alias('ef')
  53. .description('extract one file from archive')
  54. .action(function (archive, filename) {
  55. require('fs').writeFileSync(require('path').basename(filename),
  56. asar.extractFile(archive, filename))
  57. })
  58. program.command('extract <archive> <dest>')
  59. .alias('e')
  60. .description('extract archive')
  61. .action(function (archive, dest) {
  62. asar.extractAll(archive, dest)
  63. })
  64. program.command('*')
  65. .action(function (_cmd, args) {
  66. console.log('asar: \'%s\' is not an asar command. See \'asar --help\'.', args[0])
  67. })
  68. program.parse(process.argv)
  69. if (program.args.length === 0) {
  70. program.help()
  71. }