如何建立 Node.js CLI 專案

Photo by Harley-Davidson on Unsplash
Photo by Harley-Davidson on Unsplash
Node.js 讓我們可以用 JavaScript 開發命令列應用程式 (CLI, Command-line interface, application) 或是服務器端應用程式 (Server side application)。本篇會介紹如何建立一個 Node.js CLI 專案。

JavaScript 是目前當紅的程式語言。它不再侷限於網頁開發,Node.js 讓我們可以用 JavaScript 開發命令列應用程式 (CLI, Command-line interface, application) 或是服務器端應用程式 (Server side application)。本篇會介紹如何建立一個 Node.js CLI 專案。

建立 Node.js 專案

建立一個資料夾。然後,在資料夾裡面執行 npm init -y,專案就建立好啦!你可以看到資料夾下產生了 package.json 檔案。它就是 Node.js 的專案設定檔。

% mkdir hello-cli
% cd hello-cli
% npm init -y
% ls
package.json

我們快速地了解一下 package.json。

  • name:專案名稱
  • version:專案版本
  • main:專案的入口程式檔。預設為 index.js,但 NPM 不會產生它。
{
  "name": "hello-cli",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

建立 Node.js CLI 腳本

建立 index.js 檔,並填入下方的程式碼。第一行是告訴系統,用 node 指令來執行這個腳本。

#!/usr/bin/env node

const [,, ... args] = process.argv;
console.log(`Hello ${args}`);

讓我們來執行 index.js。先設定 index.js 為可執行檔,然後執行它。

hello-cli % chmod +x index.js
hello-cli % ./index.js Wayne
Hello Wayne

建立專案指令

package.json 的 main 是當其他的專案引入 hello-cli 時,程式碼的入口點。但是 hello-cli 是 CLI 專案,不是一個 Node.js 模組專案,所以我們可以移除他。

如下的 package.json,我們在 bin 下新增一個指令叫 hello,而且它會執行 index.js。當使用者安裝 hello-cli 後,就可以在命令列下打 hello 指令。

{
  "name": "hello-cli",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "bin": {
    "hello": "index.js"
  }
}

安裝 CLI 專案至本地系統

剛剛我們建立好專案指令,可是不安裝專案的話,我們是無法測試專案指令的。但是,我們也不想透過直接執行 index.js 來測試我們的專案。

我們可以在專案下,用 npm link 安裝我們的專案到本地系統。

hello-cli % npm link

然後你就可以在本地執行我們的專案。

% hello Wayne
Hello Wayne

用下面的指令可以解除安裝。

hello-cli % npm unlink

調整 CLI 專案結構

現在讓我們調整一下 CLI 的專案結構。一般來說,CLI 的專案會是像下面這樣。指令入口程式會是在 bin 資料夾下面。而 lib 資料夾下則是會放我們自己寫的模組。

hello-cli % tree
├── bin
│   └── cli.js
├── lib
│   └── lib.js
├── package-lock.json
└── package.json

在 package.json 裡,調整 hello 指令的程式路徑。

{
  "name": "hello-cli",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "bin": {
    "hello": "bin/cli.js"
  }
}

新增 lib/lib.js 檔案,程式碼如下:

exports.sayHello = function (to) {
  console.log(`Hello ${to}`);
}

將 index.js 搬到 bin/cli.js,並改為如下,引入 lib.js 的 sayHello() 函式。

#!/usr/bin/env node

const [,, ... args] = process.argv;

const sayHello = require('../lib/lib').sayHello;
sayHello(args);

發佈到 NPM

最後,用下面的指令,你可以將 hello-cli 專案發佈到 NPM Repository。後面的 –access=public 指的是發佈到公開的 Repository。發佈上去後,任何人都可以下載並安裝你的專案。如果你想要發佈到私有的 Repository,那就要付費了。

% npm publish --access=public

結語

試著建立一個 Node.js 專案後,我們可以感受到 Node.js 提供我們一個快速的開發方法。而且這套方法,可以讓你開發 Web application(如 React/Angular/Vue.js)、CLI application、和 Server side application。這是其他開發環境所無法提供的多樣性。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

You May Also Like
Photo by Rayia Soderberg on Unsplash
Read More

Webpack 新手教學

Webpack 是什麼呢?就如它的官網所言,它是可以用來打包 (Bundle) scripts、styles、images、assets。在 Bundle 的過程中,它會解析這些檔案與模組之間的依賴關係,最後輸出靜態的檔案。在 Runtime 時,不需要再安裝第三方模組。
Read More
Photo by Berkay Gumustekin on Unsplash
Read More

TypeDoc 教學

TypeDoc 是一個 TypeScript 的 API 文件產生器。它將程式碼中的註解提取出來,並轉換成網頁 API 文件。本文章將介紹如何在專案中使用 TypeDoc,以及如何用 TypeDoc 在程式碼中撰寫 API 文件。
Read More
Photo by Miranda Fritz on Unsplash
Read More

如何建立 Node.js + TypeScript 專案

TypeScript 是 Microsoft 在 2012 年推出的程式語言。它無法直接在瀏覽器上執行。而是要先藉由編譯器編譯成 JavaScript 檔之後,才能執行。TypeScript 有很多好用的語法,如物件導向 (Object-Oriented) 和範型 (Generic),加上要型別宣告。
Read More