5

Node.js と npm を使用してビルド時に特定のファイルを自動的に圧縮する方法はありますか?

たとえば、プロジェクトがあり、そのファイル構造は次のようになります。

Project/
--lib/
--node_modules/
--test/
--index.js
--package.json

たとえば、lib フォルダー、node_modules および index.js の特定のモジュールをいくつかの zip アーカイブに圧縮して、AWS Lambda にアップロードできるようにしたいと考えています。テスト フォルダーやテスト Node.js モジュール (mocha と chai) を圧縮する必要はありません。zip ファイルを生成するための bash スクリプトも作成しましたが、「npm install」が呼び出されたときにこのスクリプトを自動的に実行する方法はありますか?

これは標準的な問題であり、標準的な解決策があるはずですが、そのようなものを見つけることができませんでした。

アップデート

michael のおかげで、gulp を使うことにしました。これは、AWS Lambda で他の誰かが必要とする場合に備えて、私のスクリプトです。

var gulp = require('gulp');
var clean = require('gulp-clean');
var zip = require('gulp-zip');
var merge = require('merge-stream');

gulp.task('clean', function () {
    var build = gulp.src('build', {read: false})
        .pipe(clean());
    var dist = gulp.src('dist', {read: false})
        .pipe(clean());

    return merge(build, dist);
});

gulp.task('build', function() {
    var index = gulp.src('index.js')
        .pipe(gulp.dest('build'));
    var lib = gulp.src('lib/**')
        .pipe(gulp.dest('build/lib'));
    var async = gulp.src('node_modules/async/**')
        .pipe(gulp.dest('build/node_modules/async'));
    var collections = gulp.src('node_modules/collections/**')
        .pipe(gulp.dest('build/node_modules/collections'));
    var underscore = gulp.src('node_modules/underscore/**')
        .pipe(gulp.dest('build/node_modules/underscore'));
    var util = gulp.src('node_modules/util/**')
        .pipe(gulp.dest('build/node_modules/util'));
    var xml2js = gulp.src('node_modules/xml2js/**')
        .pipe(gulp.dest('build/node_modules/xml2js'));

    return merge(index, lib, async, collections, underscore, util, xml2js);
});

gulp.task('zip', ['build'], function() {
    return gulp.src('build/*')
        .pipe(zip('archive.zip'))
        .pipe(gulp.dest('dist'));
});

gulp.task('default', ['zip']);
4

8 に答える 8

3

npm scriptsを見てください。

リポジトリに bash スクリプトを配置する必要がありますが、npm実行時にいくつかのタスクによって自動的にトリガーされます。

于 2015-07-09T00:39:03.233 に答える
3

gulp-sftp、gulp-tar、gulp-gzip、およびエイリアスをコマンドとして使用して、gulp を使用します。.bash_aliasesユーザーのホームフォルダーに次のファイルを作成します。

alias installAndUpload='npm install && gulp runUploader'

再起動後、このエイリアスを使用して両方のアクションを一度に呼び出すことができます。

gulp ファイルは次のようになります。

var gulp = require('gulp');
var watch = require('gulp-watch');
var sftp = require('gulp-sftp');
var gzip = require('gulp-gzip');

gulp.task('runUploader', function () {
    gulp.src('.path/to/folder/to/compress/**')
        .pipe(tar('archive.tar'))
        .pipe(gzip())
        .pipe(gulp.dest('path/to/folder/to/store')) // if you want a local copy
        .pipe(sftp({
            host: 'website.com',
            user: 'johndoe',
            pass: '1234'
        }))
});

もちろん、gulp-watch を追加して、ディレクトリに変更があるたびに自動的に tar/zip を作成してアップロードすることもできます。

于 2015-07-09T00:45:50.707 に答える
1

タスクを自動化する必要がある場合は、GruntまたはGulpを参照してください。

Grunt に必要なプラグインの場合:

https://www.npmjs.com/package/grunt-zip

https://www.npmjs.com/package/grunt-aws-lambda

于 2015-07-09T00:46:57.340 に答える