簡単なノードを作りましょう.JI CLIアプリケーション


皆さんこんにちは!あなたが無事であることを望んでください.
今日、我々はすぐにノードを作成する方法を見に行くつもりです.JS CLIアプリケーション.これは真の初心者のポストです.ノードの作成経験がある場合.JS CLIアプリケーション、そして、私はあなたがここからより多くを学ぶと思いません.あなたはいつも読んで見ることができる.何か新しいことを学ぶかもしれません.
今ではそれは邪魔です.始めましょう.

私たちは何を建てていますか。


CLIはコマンドラインインターフェイスです.より良い理解は、あなたのコンピュータでそれを端末と呼ぶことによって得られます.CLIアプリは、端末で動作するアプリです.最小限の視覚効果、最大の効率と生産性はCLIアプリのtaglineです.
うーん、私はノードに良い導入されることについて考えました.JS CLIアプリケーション.最もよく使われるCLIコマンドの一つはls コマンド.ノードを使って再生しましょう.js私たちはnls .

貿易の道具


ノード。js


ノード.jsは端末(またはブラウザの外部)のJavaScriptランタイムです.JavaScript開発者が彼らの魅力的なJavaScript知識で完全に機能したバックエンドシステムをつくるのを許すことは、テクノロジーの素晴らしい部分です.続きを読むhere .

NPM -パッケージマネージャ


パッケージマネージャー.1000のオープンソースのパッケージを試してみることができますし、偉大なものを構築するために使用します.簡単にインストールして起動すると、任意のJS開発者のツールボックスで素晴らしいツールです.
あなたがNPMが考えると思う楽しい事実Node Package Manager , それはほとんどの人が作る誤解です.それは実際には“NPMは頭字語ではない”のための再帰的なbacronymic略語です.https://github.com/npm/cli
それは今のところだと思う.何かを作りましょう.
最初にNLSと呼ばれるフォルダを作成します.cd NLSに.ノードとNPMの設定を確認します.
ランnpm init -y . これはパッケージを作成します.JSONこれは、アプリケーションの設定ファイルです.それはあなたが使用している依存関係、名前、説明、はるかに一覧表示されます.
あなたのための運動-y ? 我々がそうしないならば、何が起こります.
我々がする必要がある最初のことはindex.js NLSディレクトリで.クール.
ノードのAPIドキュメントに移動できます.私たちが使用できるものを参照してください.訪問Here . あなたが持っているバージョンについては、次のとおりです.14歳を走ります.X LTSバージョン.だから私はそれを使用します.左側のサイドバーには、別の標準ライブラリとAPIが使用できます.透視する.ファイルシステムと呼ばれるものが表示されます.それをロードします.それは広大な広大な文書です.圧倒的な感じをするな.あなたが先に行くとreaddirを検索できます.の3つのバージョンがありますreaddir 我々の使用のために利用できる機能.
1 )コールバックベース.Doc
2 )同期readdir.Doc
3)約束ベース.Doc
それらを読んでください.すべてを理解する必要はありません.あなたがそれを読んで、違いの考えを得ることは本当に良いです.コールバックベースのものを使います.私はおそらく大きなプロジェクトの約束ベースのアプローチを好むでしょう.コードを書きましょう.
fsモジュールを必要として起動します.(私たちはECMAScriptモジュールシステムを使うことができます.これは今では広く入手可能です.また、ノードパッケージをインポート/エクスポートすることを期待しています.more 興味があれば)
const fs = require('fs')
次にreaddir関数を使用します.readdirは3つの引数を受け取ります.最初のパスはパスです.これは内容を読みたいディレクトリのパスです.番目はオプションオブジェクトです.オプションがありますencoding and withFileType . 注意.我々はそれを使用します.最後は、readdir実行後のコードを実行できるコールバック関数です.コールバックは2つの引き数を受け入れる.err and files . わかりました.
// process.cwd() is the way by which node understands the 
// current working directory. We will change it soon. 
// Give me 2 minutes :)
fs.readdir(process.cwd(), (err, files) => {
 if(err) {
  console.error('something went wrong!');
  return;
 }
 console.log(files)
})
どうやってそれをテストするのですか?まあノードは簡単になります.パッケージに行きなさい.JSONその中のどこか、JSON構造を壊さずに
// package.json
// You can replace nls with whatever you want. This is what 
// your ls command is going to be. Get creative. 
"bin": {
  "nls": "index.js"
},
次のインデックスに戻る.JSとそれを実行可能にするためにshebangを追加します.あなたのJSファイルの最初の行でなければなりません.
#!/usr/bin/node
Shebangはどのインタプリタが使用するかを伝えます.ノードを使用します.
今すぐにパッケージを使用してディレクトリです.ソンソンランnpm install -g . ( NPM関連も同様です)
これはあなたが今できることを意味する必要がありますnls 端末で何かを見てください.好きなもの

エキサイティング.これはディレクトリ内のファイルとフォルダの配列です.wohoo.ほとんど、ほとんど.つの重要な点に注意してください.配列です.すべてのファイルは、同じ緑の色で着色されます.それを修理しましょう.コンソール出力を色にチョークをインストールしましょう.チョークは、ターミナルスタイリングヘルパーです.これは、アプリケーションのコンソールログ/スタイル/色にシンプルなラッパーを提供します.Chalk npm install --save chalkでは、次のオプションオブジェクトを使いましょうreaddir 関数.
コードを変更
readdir(process.cwd(), { withFileTypes: true },...
// no changes here..
)
withfiletypesは、私たちが返すファイルがタイプのクラスであることを保証しますfs.Dirent . これはノードファイルオブジェクトで、ここでは非常に普通の特定のプロパティとメソッドを持っています.fs.Dirent . つは、方法の一つですfs.isDirectory() を返します.あなたが名前から得るように.ディレクトリかどうかをチェックするのに便利です.それを含めましょう.関数の変更
//index.js

readdir(process.cwd(), { withFileTypes: true }, (err, files) => {
    if (err) {
        log(chalk('ERROR'));
    }
    files.forEach((file) => {
        if (file.isDirectory()) {
            log(chalk.blueBright(file.name));
        } else {
            log(chalk.whiteBright(file.name));
        }
    });
});
うーん.さあ実行しましょう.保存とタイプnls あなたの端末に.フォルダは青い色で、ファイルは白です.ああ.
私が作りたいもう一つの変更は、議論を受け入れることです.ls 引数とリストのファイルとフォルダのパスを取ることができます.フォー.Linuxマシンで.ls /home/{usrname(replace with your usernam)} ディレクトリ内のファイルを一覧表示できます.それを加えましょう.
CLIで渡された引数をどのように読み込むことができますか?私たちはprocess.argv 値.注意process.argv が配列です.最初の2つの値は、お客様のシステムのノードのインストールに関連しています.第三の価値を受け入れるprocess.argv[2] . コードを変更する

const lsArgs = process.argv[2]

const fileDirectory = lsArgs ? lsArgs : process.cwd();

readdir(fileDirectory, { withFileTypes: true }, (err, files) => {
    if (err) {
        log(chalk('ERROR'));
    }
    files.forEach((file) => {
        if (file.isDirectory()) {
            log(chalk.blueBright(file.name));
        } else {
            log(chalk.whiteBright(file.name));
        }
    });
});

それは簡単だった.もし存在しているか、cwd ()を使用しているなら、argをとってください.wohoo.私たちは何かを持っている.もう一つの改善は、我々は我々のリストから隠しフォルダを隠すことができるということです.このチェックにはregexを使用できます.好きなものfiles = files.filter((file) => !/(^|\/)\.[^\/\.]/g.test(file.name));
うまくいきます.
よく.CLIアプリケーションがあります.これを実際にNPMに配備することができます.NPMにログインして実行することができますnpm deploy そこまでそれを得るために.これはあまりにも長くなってしまい、ここでの展開には使用しません.インデックス全体の追加下記参照.どうか私にあなたの考えを知らせてください.
#!/usr/bin/env node

const fs = require('fs');
const chalk = require('chalk');

const { log } = console;
const { readdir } = fs;

const lsArgs = process.argv[2];

const fileDirectory = lsArgs ? lsArgs : process.cwd();

readdir(fileDirectory, { withFileTypes: true }, (err, files) => {
    files = files.filter((item) => !/(^|\/)\.[^\/\.]/g.test(item.name));
    if (err) {
        log(chalk.red('ERROR'));
                return;
    }
    files.forEach((file) => {
        if (file.isDirectory()) {
            log(chalk.blueBright(file.name));
        } else {
            log(chalk.whiteBright(file.name));
        }
    });
});