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






