iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 8
0
Modern Web

從零開始認識 Node.js系列 第 8

[Day 8] API 尋寶記 - 入門第一關 Command Line Options

http://ithelp.ithome.com.tw/upload/images/20161208/20102342Co0Bq9HX3B.png

前言

走進 Node.js 世界的第一步就是 Command Line ,因此 API 從 Command Line Options 說起在適合不過。

此外就在這個月有幾個主要更新,

  1. [來源] 6 號官方更新了所有在線的版本,版本號更新如下:

    • v4 (LTS): v4.6.2 → v4.7.0
    • v6 (LTS): v4.9.1 → v4.9.2
    • v7 (-----): v7.2.0 → v7.2.1
  2. [來源] 3 號將 Node.js v7 的 Chrome v8 由 v5.1 升級至 v5.4

    • 增加 ECMAScript 的新語法
    • 改善 Memory 的消耗達 40%

基本格式

  1. 常用的 Command Line 格式:
    • node [options] [v8 options] [script.js | -e "script"] [arguments]
    • optiones 會在 Options 參數 說明
    • v8 options 可透過第三項的指令取得能設定的參數
  2. Node.js 的 Debug 模式 ( 介紹到 Debugger API 時會做說明 )
    • node debug [script.js | -e "script" | <host>:<port>] …
    • API 尋寶記 - Debugger 篇
  3. 查看 Node.js 的 Chrome v8 的設定情況
    • node --v8-options

使用範例

以下範例為透過 Node.js 建立 HTTP Server ,

  1. 建立一個 app.js 檔案,檔案內容如下:
    // 使用 HTTP API
    const http = require('http');
    
    // 取得設定的 PORT
    const port = process.env.PORT || 3000;
    
    // 設定 Server
    const server = http.createServer((req, res) => {
      res.end('Hello World\n');
    });
    
    // 啟用 Server
    server.listen(port, () => {
      console.log(`Server running at http://localhost:${port}/`);
    });
    
  2. 執行 app.js

只需輸入 node app.js , Command 上會顯示 **Server running at http://localhost:3000/** 即表示 Server 執行中,此時在 Browser 中輸入 localhost:3000 ,頁面會顯示開發人員都熟悉不過的 Hello World 。恭喜你成為 Node.js 的一員! XD

Options 參數

在些資料除了透過 官網 取得外,也可以透過在 Command Line 下 man node 取得。 man 是什麼呢?man 是 manual (手冊) 的簡寫,若有興趣了解更多,可以到中文 man Linux - 鳥哥的 Linux 私房菜 朝聖。https://nodejs.org/dist/latest-v6.x/docs/api/process.html

簡碼 完整 加入時的版本碼 說明
-v --version v0.1.3 查詢當前使用的 Node.js 版本號
-h --help v0.1.3 印出所有 Options 並簡短說明,等於是 man node 的精簡版
-e --eval v0.5.2 使用方式 -e "script" ;將 script 的內容當做 JavaScript 執行,也可以透過 REPL ( API 尋寶記 趕稿中 ) 的預先定義,當做 JavaScript 的參數使用
-p --print v0.6.4 使用方式 -p "script" ;將 script return 的內容印出
-c --check v5.0.0 檢查輸入的 script 是否正確
-i --interactive v0.7.7 既使 terminal 的 stdin ( API 尋寶記 趕稿中 ) 不在,依舊開啟 REPL
-r --require v1.6.0 使用方式 -r module (require() 相同);啟動時預先載入 module
--no-deprecation v0.8.0 使用到棄用的特性時,暫止警告訊息
--trace-deprecation v0.8.0 使用到棄用的特性時,印出警告訊息
--throw-deprecation v0.11.14 使用到棄用的特性時,拋出警告訊息
--no-warnings v6.0.0 暫停所有警告訊息
--trace-warnings v6.0.0 印出所有警告訊息
--trace-sync-io v2.1.0 當檢測第一個事件環循時,就印出追蹤到的 I/O
--zero-fill-buffers v6.0.0 自動填 0 到 Buffer 與 SlowBuffer 中 (Buffer ( API 尋寶記 趕稿中 ))
--preserve-symlinks v6.3.0 當解析與暫停的 Module 時,指示 Module loader 保留符號鏈接 (symbolic links) 。為了扼要的說明,內容上做了取捨,建議想了解更詳細可以到 文件 ,裡面有範例能讓你更清楚這個參數的用意
--track-heap-objects v2.4.0 追蹤 heap snapshots 的 heap object 分配
--prof-process v6.0.0 使用 Chrome v8 的 --prof 輸出 Chrome v8 的分析
--v8-options v0.1.3 印出 Chrome v8 的 Command Line Options ,提醒一點是 - 可以用 _ 替換,如 --stack-trace-limit 等於 --stack_trace_limit
--tls-cipher-list=list v4.0.0 指定備用默認TLS加密列表 (預設需要使用加密)
--enable-fips v6.0.0 在啟動時啟用 FIPS-compliant 加密 (需要 Node.js 建置時使用 ./configure --openssl-fips)
--force-fips v6.0.0 在啟動時強制使用 FIPS-compliant 加密 (要求和 --enable-fips 相同)
--openssl-config=file v6.9.0 在啟動時讀取 OpenSSL 設定檔,此外也可以用在 FIPS-compliant 加密上
--icu-data-dir=file v0.11.15 指定 ICU 資料載入的位置,使用這個參數會覆寫環境變數 NODE_ICU_DATA

註: --no-deprecation--trace-deprecation--throw-deprecation--no-warnings--trace-warnings 實際使用情境,日後會再試試,若有人使用經驗,希望你能在下方分享。

環境變數 (Environment Variables)

指令 加入時的版本碼 說明
NODE_DEBUG=module[,…] v0.1.32 印出 Core Moduel 的 Debug 資訊;使用 , 分隔
NODE_PATH=path[:…] v.0.1.32 指定 Module 的搜索目錄前綴路徑列表;分隔需注意, Windows 用 ; ,其餘用 :
NODE_DISABLE_COLORS=1 v0.3.0 當設置為 1 將不會在 REPL 中使用顏色
NODE_ICU_DATA=file v0.11.15 ICU (Intl object) 的資料路徑,此外編譯時
NODE_REPL_HISTORY=file v3.0.0 保留 REPL 歷史,預設放在 ~/.node_repl_history;若配置設為 """ " 禁止 REPL 被記錄
NODE_TTY_UNSAFE_ASYNC=1 v6.4.0 當設置為 1 ,輸出到 Terminal 時 stdout 和 stderr 時將會以非阻塞 (non-blocking) 與非同步 (asynchronous) 的方式進行 stdio,此時 stdio 不會在離開程序時被丟棄和發生錯誤;官方不建議使用此模式 (Use of this mode is not recommended)

註:

  1. [來源] stdout 、 stderr 翻成中文分別是 標準輸出 、 標準錯誤輸出
  2. [來源] stdio 指 C++ 的 cstdio ,別忘了 Chrome v8 使用 C++ 撰寫

參考資料

  1. Node.js 命令行(CLI)的使用及命令行選項
  2. nodejs 中的 NODE_PATH

上一篇
[Day 7] Node.js 的 Document (4) - Node.js 也有官方使用手冊
下一篇
[Day 9] API 尋寶記 - 神秘的 Console 、 Cluster
系列文
從零開始認識 Node.js31

1 則留言

0
King Tzeng
iT邦新手 4 級 ‧ 2016-12-12 10:42:08

推推~

準備入 Node.js 的坑嗎 XD

我要留言

立即登入留言