ftp-client で指定のファイルを FTP アップロードする

前回、promise-ftp という node-ftp のラッパーを紹介した。

今回は ftp-client というパッケージを使って、FTP アップロードを簡潔に行ってみる。この ftp-client も、node-ftp をラップしているパッケージだ。

まずは ftp-client のインストール。

$ npm i -D ftp-client

今回は、プロジェクト直下の dist/ ディレクトリ内に、アップロード対象のファイルがあるという前提にする。FTP 接続先は、/html-dir/ 配下にファイルを配置するというテイにしてみよう。

以下のようなファイル (ftp-upload.js) を作ったら、$ node ftp-upload.js で実行できる。

// FTP 接続先情報
const user     = 'user';
const password = 'password';
const host     = 'example.com';

const FtpClient = require('ftp-client');
const ftpClient = new FtpClient({
  user    : user,
  password: password,
  host    : host
}, {
  logging  : 'debug',  // ロガーのレベル (詳細表示)
  overwrite: 'all'     // 全て上書きする
});

ftpClient.connect(() => {
  console.log('Connected');
  ftpClient.upload(
    // アップロードするファイルを選択する
    [
      'dist/index.html',
      'dist/about/index.html',
      'dist/about/images/icon.png'
    ],
    // アップロード先のディレクトリを指定する
    '/html-dir/',
    {
      baseDir  : 'dist',  // ローカルとリモートのディレクトリ位置を揃えるため、ローカルのベースディレクトリを指定する
      overwrite: 'all'    // 上書き設定
    }, (result) => {
      console.log('Uploaded', result);
    });
});

upload() の第3引数で指定する baseDir がミソ。ココでベースディレクトリを揃えておくと、ローカルのディレクトリ構造を保持してリモート側にアップロードできる。

ローカルのパス 送信先のパス
dist/index.html /html-dir/index.html
dist/about/index.html /html-dir/about/index.html
dist/about/images/icon.png /html-dir/about/images/icon.png

このようになる。便利。