配置一個簡單而實用的 JavaScript 開發環境

niexxf 7年前發布 | 11K 次閱讀 測試技術 Git JavaScript開發 JavaScript

在一個框架、庫和工具無處不在的時代,可能很多人都會面臨選擇困難癥。

根據我的經驗,寫一個模塊或 CLI 工具前你所要做的第一件事就是設置一個開發環境。對這個步驟有人喜歡有人討厭。但不管怎樣,它可能總是花掉你很多時間,你得不停地調整你配置的方方面面。

當然,你可能使用 webpack、eslint、jasmine 甚至是 TypeScript(而最終可能只換來“很棒”的編譯錯誤信息)。事實上,大部分情況下,作為開發者,我們可以使用一些幾乎不用配置的工具。通常來說,這些“開箱即用”的工具完全可以接受的,并將幫助我們直接解決問題,同時還能提供幾乎實時的閉環反饋。

當我們談論最小化配置,我們最關注的是測試、代碼規范檢查、監控文件內容改變以及確保你在提交代碼前沒搞砸前面這些點。

下面是一個幫助你用五分鐘或者更少的時間(取決于 NPM 的心情^^)一步步從無到有建立開發環境的步驟:

初始化 Node.js 項目和 Git 倉庫

# Create a directory and cd into it (#protip – $_ holds argument of your last command)
$ mkdir awesome-module && cd $_

# Initialize Node.js project with default settings
$ npm init --yes

# Create initial folders and files
$ mkdir lib test
$ touch index.js lib/meaningOfLife.js test/index.test.js test/meaningOfLife.test.js

# Initialize GIT repository and create initial commit
$ git init
$ git add -A; git commit -am "Awesome Module, day one"

安裝工具

在這里,我們將使用四個簡單的模塊,每個模塊完成一件事。 Ava 負責測試, Standard 負責代碼規范檢查, Chokidar-cli 負責文件監控,最后 Precommit-hook 負責自動運行 npm 腳本。

為什么選擇這幾個工具?因為它們不需要任何配置即符合我們使用者的思維習慣。這樣少一件事情(指修改配置)需要思考和擔心。

$ npm i --save-dev ava standard chokidar-cli precommit-hook

記得創建 .gitignore 文件并添加 node_modules 目錄到文件中!我們不需要將依賴的庫提交到我們的代碼倉庫里。

配置工具

打開 package.json 并添加這些腳本到你的文件:

"scripts":  {
  "test":  "ava",
  "lint":  "standard",
  "dev":  "chokidar "**/*.js" -c "standard && ava""
},
"pre-commit":  ["test",  "lint"],

就這樣,一切都搞定了!一旦你運行 npm run dev ,所有的 JS 都會通過 Standard.js 進行規范檢查,并通過 Ava 進行單元測試。不用額外做別的什么了,你現在就可以開始你的工作。

同樣,提交 Git 提交時,這些腳本也會被自動運行。除非你的測試和代碼檢查都通過,否則你無法提交代碼。

兩件值得注意的事:

  1. 你無須安裝 standard 或 ava 到你的系統全局域下,因為它們可以從 node 上下文里執行。
  2. 因為我們使用 && 代替 j ,在 dev 腳本里,單元測試在代碼檢查未通過前不會被觸發。這讓反饋閉環更快(即避免無謂的測試消耗時間)。

用這個配置工作

因為環境假定你使用 TDD(測試驅動開發)方式工作(你可能應該這么做!),一但你運行你的 dev 腳本,你可以創建測試并且將它們添加到測試用例集中,不需要重啟監控程序或者重新構建。

讓我們創建第一個測試文件:

// test/meaningOfLife.test.js
const test = require("ava")
const meaningOfLife = require("../lib/meaningOfLife")

test("Real meaning of life", (t) => {
  t.is(meaningOfLife(), 42)
})

一但你保存文件,你會立即發現你的一個測試用例未通過,讓我們來修復它:

// lib/meaningOfLife.js
module.exports = () => 42

好,現在測試通過了!就是這么簡單。讓我們創建另一個模塊,它接受一個數值參數,讓它的值加倍,然后對這個模塊進行單元測試,看看是否它與我們的“生命的意義”模塊能夠很好地集成到一起(注意,到這里已經是集成測試,而不是單元測試!)。

And we are back to green! It's as simple as that. Let's create another module that'll multiply a numeric parameter, unit test this module and see whether it’ll work nicely with our “meaning of life” (note that it’s already an integration test, not unit!).

// lib/multiply.js
module.exports = (number) => {
  if (typeof number !== "number") throw new TypeError("Only numbers can be multiplied!")
  return number * 2
}
// test/multiply.test.js
const test = require("ava")
const multiply = require("../lib/multiply")

test("Can multiply numbers", (t) => {
  t.is(multiply(10), 20)
})

test("Throws when you try to multiply non-number value", (t) => {
  t.throws(() => multiply("ohai!"), "Only numbers can be multiplied!")
})

現在,讓我們把兩者放在一次測試:

// test/index.test.js
const test = require("ava")
const awesomeModule = require("../index")

test("Works nicely together", (t) => {
  t.is(awesomeModule(), 84)
})
// index.js
const meaningOfLife = require("./lib/meaningOfLife")
const multiply = require("./lib/multiply")

module.exports = () => multiply(meaningOfLife())

它沒問題!只需要幾分鐘時間,我們就可以讓一切就緒。

我們作為開發者,經常被閃閃發光的新工具迷住。我們似乎忘記了那些工具本來應該讓我們工作得更輕松、更快速和不容易出錯。通常情況,最簡單的解決方案就足夠了。與其花費大量的時間在配置環境上,不如將時間花在編寫軟件本身上。而遵循上面的步驟將讓你可以達到這一目的。

一但你的項目開始增長,你可能會發現自己需要引入一些更復雜的東西。然而,在大部分情況下,這一問題不會出現。上面那些工具會在很長很長一段時間內符合你的需求。

 

來自:https://www.h5jun.com/post/setting-up-a-minimal-yet-useful-javascript-dev-environment.html

 

 本文由用戶 niexxf 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!