Zip-приложение из текущей папки

1

ive node.js, что мне нужно застегнуть всю текущую папку с помощью команды и получить zip в корне

Для этого я хочу использовать архиватор пакет NPM, но я не понимаю следующее:

  1. где я помещаю текущую папку (поскольку я хочу заархивировать все приложение)
  2. где я должен поместить имя zip (zip, который должен быть создан при выполнении команды)

Мое приложение имеет следующую структуру

MyApp
  Node_modules
  server.js
  app.js 
  package.json
  arc.js

В arc.js Ive поместил всю zip-логику, поэтому я предполагаю, что мне нужно предоставить zipPath (который в моем случае "./") и zip-имя, например myZip...

Я пробовал с этим без успеха, любую идею?

var fs = require('fs');
var archiver = require('archiver');

// create a file to stream archive data to.
var output = fs.createWriteStream(__dirname + '/.');
var archive = archiver('zip', {
    zlib: { level: 9 } // Sets the compression level.
});

// listen for all archive data to be written
output.on('close', function() {
    console.log(archive.pointer() + ' total bytes');
    console.log('archiver has been finalized and the output file descriptor has closed.');
});

archive.on('warning', function(err) {
    if (err.code === 'ENOENT') {
        // log warning
    } else {
        // throw error
        throw err;
    }
});

// good practice to catch this error explicitly
archive.on('error', function(err) {
    throw err;
});

// pipe archive data to the file
archive.pipe(output);

Мне нужно, чтобы при открытии командной строки

folder->myApp-> запустите zip-дугу и создаст zipped файл под текущим путем (который в этом случае является корнем...)

Теги:
zip
archive

2 ответа

1
Лучший ответ

Вы можете использовать метод glob, но обязательно исключайте *.zip файлы. В противном случае сам файл zip будет частью архива. Вот пример:

// require modules
var fs = require('fs');
var archiver = require('archiver');

// create a file to stream archive data to.
var output = fs.createWriteStream(__dirname + '/example.zip');
var archive = archiver('zip', {
    zlib: { level: 9 } // Sets the compression level.
});

// listen for all archive data to be written
output.on('close', function () {
    console.log(archive.pointer() + ' total bytes');
    console.log('archiver has been finalized and the output file descriptor has closed.');
});

// good practice to catch warnings (ie stat failures and other non-blocking errors)
archive.on('warning', function (err) {
    if (err.code === 'ENOENT') {
        // log warning
    } else {
        // throw error
        throw err;
    }
});

// good practice to catch this error explicitly
archive.on('error', function (err) {
    throw err;
});

// pipe archive data to the file
archive.pipe(output);

archive.glob('**/*', { ignore: ['*.zip'] });

archive.finalize();
  • 0
    Спасибо !, Как я могу выполнить это из командной строки?
  • 0
    Мне нужен какой-то простой способ выполнить его ... пример будет очень полезным? Может быть, добавить его в раздел скриптов в package.json, не уверен, как, так как мне нужно нодировать ...
Показать ещё 9 комментариев
1

В github node-archiver есть примерная папка



где я помещаю текущую папку (поскольку я хочу заархивировать все приложение)

Пример:

var file1 = __dirname + '/fixtures/file1.txt';
var file2 = __dirname + '/fixtures/file2.txt';

archive
  .append(fs.createReadStream(file1), { name: 'file1.txt' })
  .append(fs.createReadStream(file2), { name: 'file2.txt' })
  .finalize();

В частности, о вашем случае и каталоге вы можете использовать метод .directory() архиватора


где я должен поместить имя zip (zip, который должен быть создан при выполнении команды)

Пример:

var output = fs.createWriteStream(__dirname + '/example-output.zip');
  • 0
    Спасибо, я уже видел это, но речь идет о конкретном файле (file1 & 2), я хочу сделать это для всего приложения ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню