iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 30
6
Modern Web

平時沒注意的 JavaScript - JS 生態系及週邊工具整理系列 第 31

n, nvm, hyper, 以及如何進入新 project !

Hi, 大家好

最近有些新的工作在進行

以及有什麼內容是適合最後一篇文章的

因為 webpack 的內容已經介紹的很詳細了

接下來就來介紹這週一些碰到有趣的內容吧!

如何接觸一個新的 project (或是交接)

這我當初一樣是被 Fun Fun Function 的 MPJ 所啟發 (可以看youtube, medium)

基本上他所使用的技巧很簡單,總共有五個步驟(以下節錄/翻譯自上面的 medium)

  1. Find a mentor - 尋找一個前輩/導師

    找到一個已經對當前專案熟悉的前輩

    並問他們是否樂意在接下來幾週被你打擾,問一些呆呆的問題(像是該用幾版的 npm)

    要在沒有人協助的狀況下進入一個 project 是很困難的

    有個 mentor 會省下你非常多時間

  2. Get an overview - 聽前輩介紹 project 的概要

    請你的 mentor 給你整個 project 的一個概要

    包含整體的開發設計、User Story、Coding Style、使用的套件

    對整個 Project 有個概念,能夠解決你對於為何、以及整個系統如何開發成現在的模樣的

  3. Do a small quest - 執行一個小任務

    問你的 mentor 有沒有一個 issue 或是 feature

    是他覺得在新手掌握範圍之內的

  4. Have a don’t-get-stuck-rule - 別自己卡太久

    坐下來並好好試著獨自解決這個 task

    但是如果你被同個問題卡了 15 ~ 20 分鐘

    你卻對解決方案完全一無頭緒,那請向你的 mentor 請教

    因為你要是 15 分鐘內無法解決,大概接下來 1, 2 個小時內也無法

    「Have a dont't-get-stuck-rule」實際上會沒那麼容易執行

    因為習慣上你會被一個問題緊緊迷住,而不想輕易放棄

    但在軟體開發上,當一匹「Lone Wolf」(獨狼) 不是一件好事

    因為偉大的專案都是被優秀的「團隊」所開發的,而不是任何一個自幹高手

  5. Use code review - 跟你的同事一起看 code !

    在你寫完這個 task 後,記得找你的 mentor 一起將 code review 過一次

    這樣做可以讓知識更流通、增進 code 的品質、維持專案一致性、以及讓成員更有認同感

  • 最後一步

    接下來就可以一直持續 3 ~ 5 ,直到你有辦法獨自開發功能為止了
    (有興趣可以直接看 MPJ 的影片,介紹得更詳細)

n 與 nvm

在進入新專案的開始,最重要的一點就是管理執行環境了

這邊就不贅述 dependency 管理的重要了

總之現在指定使用 node.js 和 npm 版本的方式有兩種

  1. 使用 n, 這個由有名的 tj 所開發的工具
    特色是輕量化、並且不需要太多的設定

    https://github.com/tj/n

  2. 使用 nvm,另一個比較大型的專案
    不過使用者似乎比較多

    https://github.com/creationix/nvm

為何使用 n, nvm

我們使用 n, nvm 最主要的目的

就是能讓我們在切換專案時

能夠使用不同版本的 npm 與 node.js,才不會踩到雷

如何(手動) 改變現在使用的 npm 與 node 版本

我們使用過以前介紹過的指令 - which 可以查看目前的 node, npm 執行檔位於何處

至於 shell 怎麼知道你在輸入 node 時該去 /usr/local/bin 去抓 node 呢?

在 shell 內有個變數, $PATH,他定義了 shell 該去哪些路徑一一尋找是否有 node

所以這邊有幾個做法可以改變 node, npm 的版本

  1. 直接將 /usr/local/bin/node 移除,並使用其他版本的 node 來覆蓋
  2. 在 path 前面加上其他路徑,讓你指定的 node 版本會先被讀到

n 的用法

你可以輸入

n 0.8.14
n latest
n lts

來直接下載,並切換版本到指定的 node

n 如何管理 node 的版本

簡單來說

n 會將所有版本都放在 /usr/local/n 底下

在你切換版本的時候,他會將你指定版本的 node 從 /usr/local/n 複製到 /usr/local/bin 底下

n 的幾個特性

  1. n 是一個 npm 上的套件,要安裝得 npm install -g n

  2. 因為 n 會動到 /usr/local/bin ,所以在 Mac 上會得加上 sudo

  3. 使用 n 的時候,如果全域安裝其他 npm 套件,不會跟著你 node, npm 的版本一起跑

    有時候會出現你安裝了某個新版的 package, 在舊的環境下這些指令壞掉的情況

  4. 簡單粗暴,直接改 /usr/local/bin 的版本

nvm 的用法

nvm 的安裝方法本身就比較複雜

官方本身有提供一段 shell script,會幫你把所有需要的路徑/腳本都建起來

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
(其他 shell 的用戶記得改 bashzsh, fish)

nvm 本身其實不是什麼套件

他比較像是一段 shell script,用改變 $PATH 的方式來幫你切 node 版本的路徑

而他新增 nvm 這個指令的方式,更是直接改你的 .bash_rc.zshrc

最下面是 nvm 安裝時自己幫我加的

要使用某個 node 版本

首先要 nvm install <version>

接下來 nvm use <version>

nvm 這邊一樣可以切換 node 和 npm 的版本

不過他實際的 node, npm 的執行檔,會放在 nvm 自己各自的資料夾裡

這邊 nvm 使用這些執行檔的方式

是在每次 nvm use 的時候,都在 $PATH 前面新增特定版本的 nvm 資料夾

來覆蓋原本預設的 /usr/local/bin

有趣的地方是,nvm 他全域安裝的套件

他一樣會個別擺在 .nvm/ 之下的特定資料夾裡

這代表,每個 nvm 環境中,你都可以確保你的全域套件是特定版本的
(當然,因為後來也很少用全域套件了,這個的實用性有待考證)


(切版本時,你會發現 webpack 也不見了)

額外補充 1 : 如何「不」使用 nvm 和 n

npx 是跟在 npm@5.2.0 出的一套工具

https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b

基本上,他可以用來執行你 node_modules 裡面的執行檔

搭配上有個在 npm 上推出的一個套件 node

https://www.npmjs.com/package/node

你沒有搞錯,有個 package 叫做 node,他是 node.js 寫的

安裝 node@7.0.0 到本地端的 node_modules

你可以在 package.json 裡面寫

我們甚至可以「不」使用 npm 和 n 來管理 node 版本

夠酷吧!

額外補充 2 : hyper terminal

最近開始從 iTerm2 切換到 hyper 這個專案

https://github.com/zeit/hyper

基本上他就是 electron (HTML, CSS, JavaScript) 寫的終端機

最近我覺得他變的成熟許多,可以來跳坑了

因為是 electron 寫的,他可以改很多瘋狂的 css 和 javascript 插件

https://gist.github.com/alxtz/2f3c01ff0a001b2241a7bed00c499150

這是我的設定檔(要放在 ~/.hyper.js)

有興趣可以玩玩看

沒有明天了

很感謝所有觀眾(如果有的話) 30 天來的陸續觀看

基本上我就是工具玩的不少,所以希望能帶給大家有趣的工具來玩玩

如果明年有機會的話,就明年見囉

掰掰!

有要勘誤可以在以下地點找到我
Email: alxtz.tw@gmail.com
GitHub: github.com/alxtz
Facebook: fb.com/alxtz.tw
LinkedIn: linkedin.com/in/alxtz


上一篇
webpack-vue boilerplate, 介紹 utils, config, baseWebpackConfig
下一篇
# 第 31 天 - 寫成習慣了,鐵人賽再開
系列文
平時沒注意的 JavaScript - JS 生態系及週邊工具整理33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
Chris
iT邦新手 4 級 ‧ 2018-01-06 11:16:18

「Lone Wolf」(獨狼)
通常好像是「孤狼」XDDD

0
陳董 Don
iT邦新手 5 級 ‧ 2018-01-06 18:24:11

我是觀眾~

0
SunAllen
iT邦研究生 1 級 ‧ 2018-01-18 17:42:02

恭賀大大完賽!!

0
flyc
iT邦新手 5 級 ‧ 2018-05-08 18:29:51

受益良多0w0//

我要留言

立即登入留言