ホームページ > ウェブフロントエンド > jsチュートリアル > Npm は cli コマンドラインツールを作成します

Npm は cli コマンドラインツールを作成します

php中世界最好的语言
リリース: 2018-04-17 16:14:28
オリジナル
2132 人が閲覧しました

今回は、CLI コマンドライン ツールとしての Npm について説明します。CLI コマンド ライン ツールとしての Npm の 注意事項 について、実際のケースを見てみましょう。

はじめに

npm プラグインを作成したい場合、コマンド ラインによる操作を簡素化したい場合、怠け者でもある場合は、この記事を読む価値があります。

po オーナーの前回の記事では、独自のテンプレートのカスタマイズを紹介しましたが、po オーナーはこれに満足していないため、プロジェクトでは頻繁に新しいページ、論理スタイル、その他のファイルを手動で作成する必要があります。新しいものを作成して基本的なコードをコピーするのは非常に面倒なので、この記事を書きました。次に、po マスターに npm コマンド ライン プラグインの作成方法を段階的に説明してもらいます。

npmアカウントを登録する

npm プラグインを公開するには、まず npm アカウントを取得する必要があります。このプロセスは長くなりません。

npm公式サイト

アカウントを取得したら、npm init を通じてパッケージ

設定ファイルを生成し、情報を入力すると、ロジック コードの記述を開始できます。

コマンドエントリの書き込み

まずはプロジェクトの構造を見てみましょう

.
├── bin      //命令配置
├── README.md   //说明文档
├── index.js   //主入口
├── src      //功能文件
├── package.json //包信息
└── test     //测试用例
ログイン後にコピー
サンプルのコマンド コードはすべて bin ディレクトリに記述されています。ここで、設定ファイル パッケージ ファイルでコマンドを有効にし、設定項目 bin

 "bin": {
    "xu": "./bin/xu.js"
  },
ログイン後にコピー
を追加します。 次に、依存関係である TJ が作成したコマンダー プラグイン

npm i commander --save
ログイン後にコピー
をインストールします。 このツールを使うとコマンドコードを簡単に書くことができます

xu.js

りぃ

このファイルは

エントリ ファイル と見なすことができます。コードの最初の行を env で追加する必要があるのは、スクリプト インタプリタが Linux の異なるディレクトリにインストールされている可能性があるためです。システムのディレクトリで検索します。同時に、env はいくつかのシステム環境変数も規定します。 この書き方は主に、プログラムをさまざまなシステムに適用できるようにすることを目的としています。 このステップでは、独自の npm プラグインを簡単にテストできます

#!/usr/bin/env node
process.title = 'xu';
require('commander')
.version(require('../package').version)
.usage('<command> [options]')
.command('generate', 'generate file from a template (short-cut alias: "g")')
.parse(process.argv)
require('./xu-generate');  >>引入
ログイン後にコピー

コマンダーについては、まず作者の Github にアクセスして学習してください。パラメータについてはここでは説明しません。

xu-generate.js

$ node ./bin/xu.js
>>> 输出一些插件usage。help信息
ログイン後にコピー

これは関数コマンドで、生成コマンドを定義します。.alias('g') はコマンドの省略形で、次に .action(function(type, name){xu.run(type, name); }); となります。 function を返します。この関数は、このコマンドを定義するために必要なものです。

関数関数を書く

./src/generate.js

このファイルは、いつ

#!/usr/bin/env node
const program = require('commander');
const chalk = require('chalk')
const xu = require('../src/generate');
/**
 * Usage.
 */
program
.command('generate')
.description('quick generate your file')
.alias('g')
.action(function(type, name){
  xu.run(type, name);
});
program.parse(process.argv);
ログイン後にコピー

を入力するかを定義します 手術は完了しました。

りー

ここには 2 つの新しい依存関係があります。つまり、npm を介してインストールされたコマンド出力カラーとファイル操作プラグインです。

りー

この js ファイルは、xu-generate.js によって呼び出される run 関数をエクスポートします。パラメーターを通じてユーザーが入力した型と名前を取得し、node fs モジュールを通じて型に基づいて操作できます (ここでは依存関係が使用されています)。 、ただし原則は fs) テンプレート ファイルをプロジェクトにコピーします。

これで、プロジェクトのテンプレートファイルを素早く生成できるコマンドの開発が完了しました。

ローカルテスト

npm パッケージ開発は Web 開発とは異なり、ブラウザで直接表示し、インスタンス ディレクトリにテスト ファイルを作成してからノード テストを行うことができます。 私たちのロジックをテストするためだけに。公開後にテストする必要がある機能がある場合は、npm にローカル モジュールに接続できるリンク コマンドが用意されています。もちろん、後で公開することもできます。 テストのためにプラグインを自分でインストールすることは、プラグインを導入するのと同じです。

npmパッケージを公開する

まずプロジェクトのルートディレクトリでnpmloginを実行します

$ xu g
ログイン後にコピー

ここでエラーが発生した場合は、cnpm アドレスを使用した可能性があるため、npm ウェアハウスを元に戻す必要があります

/**
 * Created by xushaoping on 17/10/11.
 */
const fs = require('fs-extra')
const chalk = require('chalk')
exports.run = function(type, name) {
  switch (type) {
    case 'page':
      const pageFile = './src/page/' + name + '/' + name + '.vue'
      const styleFile = './src/page/' + name + '/' + name + '.less'
      fs.pathExists(pageFile, (err, exists) => {
        if (exists) {
          console.log('this file has created')
        } else {
          fs.copy('/usr/local/lib/node_modules/vue-xu-generate/src/template/page.vue', pageFile, err => {
            if (err) return console.error(err)
        
            console.log(pageFile + ' has created')
          })
          fs.copy('/usr/local/lib/node_modules/vue-xu-generate/src/template/page.less', styleFile, err => {
            if (err) return console.error(err)
        
            console.log(styleFile + ' has created')
          })
        }
      })
      break;
    case 'component':
      const componentFile = './src/components/' + name + '.vue'
      fs.pathExists(componentFile, (err, exists) => {
        if (exists) {
          console.log('this file has created')
        } else {
          fs.copy('/usr/local/lib/node_modules/vue-xu-generate/src/template/component.vue', componentFile, err => {
            if (err) return console.error(err)
          
            console.log(componentFile + ' has created')
          })
        }
      })
      break;
    case 'store':
      const storeFile = './src/store/modules' + name + '.js'
      fs.pathExists(storeFile, (err, exists) => {
        if (exists) {
          console.log('this file has created')
        } else {
          fs.copy('/usr/local/lib/node_modules/vue-xu-generate/src/template/store.js', storeFile, err => {
            if (err) return console.error(err)
          
            console.log(storeFile + ' has created')
          })
        }
      })
      break;
    default:
      console.log(chalk.red(`ERROR: uncaught type , you should input like $ xu g page demo` ))
      console.log()
      console.log(' Examples:')
      console.log()
      console.log(chalk.gray('  # create a new page'))
      console.log('  $ xu g page product')
      console.log()
      console.log(chalk.gray('  # create a new component'))
      console.log('  $ xu g component product')
      console.log()
      console.log(chalk.gray('  # create a new store'))
      console.log('  $ xu g store product')
      console.log()
      break;
  }
};
ログイン後にコピー

次に、npm パッケージを更新します。バージョン番号は前回より大きくする必要があります

追記

この時点で、エントリーレベルの npm パッケージが完成します。初めてフロントエンドを作り始めたときに、他の人のプラグインがとても良くて、簡単なインストールだけでこんなに美しくできるのを見て、とても感動したのを覚えています。見慣れないものをたくさん見て、すぐに落胆しました(ノード環境、たくさんあります。vue-cliをコピーしてコードのペアを見ただけです。賢い人は無視してください。)

学習は段階的なプロセスです。一定の基礎と長期にわたる経験がなければ、ソース コードを学習することは困難です。噛む必要がある場合はそれでも問題ありませんが、ステップバイステップほど効率は良くありません。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

AngualrJs でのタイマーの使用

ReactJS 操作フォームの選択

以上がNpm は cli コマンドラインツールを作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート