Corredor

ウェブ、プログラミングの勉強メモ。

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

12歳からはじめるJavaScriptとウェブアプリ

12歳からはじめるJavaScriptとウェブアプリ

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

neos21.hatenablog.com

今回は 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

このようになる。便利。

実際に自分のサイトを管理しているプロジェクトでも利用しているので、以下の GitHub リポジトリをご参考までに。