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。這是其他開發環境所無法提供的多樣性。