為什麼你應該在下一個專案中使用Node.js?

在什麼情況下使用Node.js是一個好主意?為什麼選擇Node.js而不是其他解決方案?本文旨在回答這個問題。 在建立任何類型的軟件時,都有大量的Node.js替代方案。 為什麼Node.js是一個好選擇? 在本文中,我將告訴你一些使用它的好理由。 Node.js是JavaScript JavaScript可能是世界上最受歡迎的編程語言。 JavaScript是唯一一種可以運行在Web瀏覽器中的語言,這使得它比任何其他語言都具有獨特的優勢。 隨著React Native、Electron和類似的解決方案的崛起,它也是唯一一種可以用來創建網絡應用、前端和後端、手機應用、桌面應用的語言。 它非常通用,一旦你在某個領域掌握了JavaScript語言,你的技能可以很容易地轉移到另一個領域,你只需要學習環境的差異(例如,如何使用React Native而不是Electron,或者DOM)。 這是你在其他地方找不到的。 此外,JavaScript是一門非常出色和靈活的語言。 如果你已經因為在瀏覽器中工作而熟悉JavaScript,那麼選擇Node.js就是显而易见的。 Node.js是事件驅動和單線程的 這是什麼意思?簡單來說,它可以很好地處理大量的負載。 每個Node.js程序都可以處理大量的並發連接,由於其非阻塞的I/O特性,仍然非常快速。 這意味著你擁有一切必要的工具來構建一個非常高效的系統。 Node.js非常受歡迎 這帶來了一些副作用。 首先,你會發現在線上討論任何類型的問題時都能找到解決方案。社區非常龐大且樂於助人。 它很容易入門,並且有很多可以學習的資源。 其次,有一個庫可以解決任何問題。 npm庫中有大量可以隨時使用的庫,只需運行一個簡單的npm install命令即可。 由於其受歡迎程度,一個惡性循環形成:你最喜歡的API可能只提供一個官方的Node.js庫,而其他語言可能根本就不被考慮,只能使用非官方的軟件包(質量不一)。 你可以輕鬆部署Node.js應用 有些編程環境需要專用的設置,即使是簡單的項目也是如此,因為沒有人為它們建立生態系統。 Heroku以簡化Rails應用程序開發而聞名,如今在Node.js中我們也有其他可比擬的解決方案。 我考慮的是Zeit Now。 當我需要一個能夠輕鬆設置一個示例Node.js應用程序並與世界共享的場所時,我會想到Glitch(提示:它也可以運行私有應用程序)。

為什麼你應該擁有自己的平台

你的部落格是你未來的運營中心,你的平台,你的總部。其他所有的東西都應該將人們帶到你的網站上。 你的 Facebook 專頁、YouTube 頻道、Twitter、Medium、你在其他部落格上的訪客文章、以及你串流的內容,都是連結人們與你網站上的內容的工具。 你可以使用任何你想要的技術來建立網站,這並不重要,只要它位於你擁有的域名上,並且你可以根據需要進行更改。 你應該對此有完全的自由:你必須能夠隨時聯絡到你的用戶,你必須能夠從這個平台中提取所有數據。而且,當你想要的時候,你應該能夠將所有內容移至不同的平台上。 最後,你不必完全依賴他人的決定。 其他人的平台 在線銷售有很多方式。對於每種類型的產品,都有一些選擇,有時候你可以按照自己的方式銷售,有時候你需要使用其他人管理的平台。 例如,如果你銷售電子書,你當然會在亞馬遜 Kindle 上銷售,因為它可能占市場的 80%。 你銷售實體產品嗎?除了你自己的電子商務網站,你還會希望在亞馬遜上銷售,因為這是一個巨大的市場機會。 你開發手機應用程式嗎?如果你的目標是蘋果用戶,你就需要在應用商店上銷售,如果是 Android 用戶,你則需要在 Google Play 上銷售。 在這些例子中,有些時候你有選擇的餘地,有些時候你必須選擇強制的方式才能真正銷售出去。 你無法通過自己的網站分發 iPhone 應用程式。另一方面,如果你為 Mac 開發桌面應用程式,則是可以的,但在這種情況下,你可能也會想要加入 Mac App Store,這是可選的。蘋果制定了規則,但也給了你一些在不在應用商店裡面之外的能見度。 所有這些偉大的分發系統,如應用商店、亞馬遜、Kindle,以及其他許多像 Etsy 或阿里巴巴這樣的平台,都是別人的平台。 使用其他人管理的平台的好處 使用其他人管理的平台當然有好處。它提供了一個幾乎無限的用戶基礎,訪問平台的客戶已經有帳戶,而且在許多情況下,他們只需要按下購買按鈕。 一般來說,不管理自己的平台可以免去很多繁瑣的事情。 使用其他人管理的平台的缺點 但是使用平台也有一些缺點。你必須遵守所有者強加的規則,而客戶不屬於你自己,他們是平台的客戶。因此,你可能難以與你的客戶建立關係。 你也很難為你的品牌留下足夠的空間,因為一切都可能隨時改變。在某些情況下,你對自己的價格幾乎沒有控制權,每次銷售都需要支付平台的佣金。 平台制定規則 平台不僅僅是人們變成客戶的地方,也是你可以找到並與他們互動的地方。Facebook、Instagram 和 Twitter 都是平台,非常好的平台,但它們仍然是其他人建立的平台。 幾年前,在 Facebook 專頁上擁有一萬名粉絲,並在專頁上發布信息足以將這些消息展示給其中很大一部分人。不幸的是,這一點在今天已經改變了,因為 Facebook 平台已經改變了。現在,能夠觸達我們的觀眾的比例遠不如過去。 唯一能夠觸達更多喜歡你專頁的人的方法就是贊助帖子。所以你必須支付費用讓 Facebook 與你的粉絲溝通:這是在其他平台上建立的意義的一個例子。 這並不意味著你不應該擁有 Facebook 專頁,不需要在 Facebook 上投資廣告,或者不需要在 Twitter 上與人互動。 如果你想建立一個觀眾,你應該做這些事情。市場上強制你這樣做,因為你可以在這些地方找到人。但是,始終試著使用這些大容器來找到人並把他們帶到你這裡。 而且,重要的是始終有一種方式可以脫離平台,而不是完全依賴它。 為此,你必須推動用戶通過所有你可以利用的渠道來來到你這裡。 你必須創建自己的平台。 使用你自己的域名 你的域名非常重要。我使用我的名字作為域名:flaviocopes.com。 你的域名就像你的地址。 只不過在現實世界中,當你搬到其他地方時,地址會發生變化。 然而,你的域名是永遠屬於你的,不論你身在何處。就像你的電子郵件地址一樣。 當你在自己的網站上發布內容時,使用自己的域名,你正在建立虛擬的房地產,並產生可以持續數年甚至數十年的價值。 就搜索引擎的工作方式而言,現在和可預見的將來,指向你網站的高質量鏈接會使域名變得更有價值。...

為什麼我應該建立電子郵件列表?

100個人中有95個人永遠不會回到您的博客。他們只是偶然發現它。給他們一個原因留下來保持聯絡。 在之前的實驗室文章中,我談到了為開發人員博客進行SEO,以及有機流量是吸引人們閱讀您所言的好方法。 有這麼多從搜索引擎中來的訪問者,您打算怎麼做? 首先,忘記廣告。它不起作用,特別是當您的目標是開發人員時。我主要談PPC(付費每點擊廣告)。除非您是CSS Tricks或其他一些大型網站,否則您只會賺一些小錢。 對於開發人員有效的是: 產品 專業內容 無論哪種情況,它們應該是您的,而不是別人/聯盟的,這是因為利潤問題。如果您以10美元出售一本電子書,通過佣金後您可以得到大約9美元。對您而言,它只需要一些前期時間投資。 我決定從一本電子書開始。人們喜歡它,驗證了我的想法,然後我又寫了一本。 然後,我決定創建一門在線課程。過去我已經創建了2門在線課程,但這是另一篇文章的故事。 不要讓您的電子郵件列表的"呼籲行動"只是“在您的收件箱中獲得我的下一篇文章”。這樣做是有效的,但我發現最好的是創建一些東西,引起對它的一些期待,並向您的人們承諾提供更好的東西(當然要做到)。 例如,當我決定創建一個關於Vue.js的在線課程時,我制定了一個時間表,我知道我還有70天課程開始。 我立即放置了一個呼籲行動,其中寫著: “我打算全職學習Vue兩個月,並為您創建一個資源,供您快速學習,其中包括教程和項目,實際範例和螢幕錄影。我將向您發送我創建的免費內容👨🏼‍💻,並隨時通知您有關課程的最新信息,以及在課程發布時提供您的大幅折扣。保持在行列!” 這個呼籲行動讓我的郵件列表每天的註冊數量從每天2-3個增加到每天25個(我無法相信這個數字)。 我認為,如果您的博客圍繞著教授某些內容,創建像書籍或課程這樣的信息產品是完美配對,因為人們以學習模式來到您的網站,他們是即將吸收您提供的所有內容的海綿。 其他類型的產品可能與您的內容不符,也許在這種情況下,最好創建一個講述您創建該產品經驗的博客,記錄旅程等。但這只是一個提示,不是任何規則。

為什麼要使用瀏覽器的預覽版本?

了解為什麼使用Chrome Canary、Firefox Nightly或Safari Technology Preview是一件好事情。 Chrome Canary 是Google為其瀏覽器所新增的最新更改的版本。Chrome有4個發佈渠道:canary、dev、beta和stable。 Firefox Nightly 是Firefox的等同於Chrome Canary的版本(他們分別有nightly、beta和release版本),而Safari則有Safari Technology Preview。 使用這些版本,您就處於前沿。Google Canary的名稱來自煤礦中可憐的那些小鸟。維基百科將canary定義為“預示著更大的危險或麻煩即將來臨的東西”。 簡而言之,這些版本的發佈是讓開發人員和公司內部人士可以嘗試最新的功能,這些功能稍後會成為發送給數億人使用的穩定版本的一部分。 瀏覽器中的更改可能需要幾個月時間才能成為穩定版本的一部分,因此作為開發人員,您希望在引入新功能時就能夠試用,而不是在它們廣泛使用後再開始使用。 例如,今天我使用Canary來測試即將引入的ES2019的Intl.RelativeTimeFormat和Intl.ListFormat功能。網頁正在快速發展變化。 使用Chrome Beta、Firefox Developer Edition和macOS的測試版本(Apple遵循其操作系統的發佈週期進行Safari的發佈)提供了更安全的體驗,因為canary或nightly版本有時可能會出現問題。 這並不是強制的,您當然可以在穩定版本的瀏覽器上完成工作。這只是您在日常工作中可用的另一種工具。 如果您喜歡測試瀏覽器在幾個月後才會向其他人提供的最新功能,包括JavaScript、最新的CSS或Web平台API等,那麼預覽版本就是您找尋這些功能的地方。 這些預覽版本不會與您計算機上的穩定版本相關聯,因此您可以在不擔心出現嚴重錯誤導致書籤丟失或破壞主要瀏覽器體驗的情況下進行測試。 我絕對鼓勵您使用這些瀏覽器。不要將其作為日常瀏覽器使用,因為某一天出現故障的版本可能會崩潰或產生奇怪的副作用,但您可以將其作為測試並使用即將推出的最新和最優秀的Web平台功能的一種方式。

為什麼要寫部落格?

我在瀏覽 Hacker News 時看到了一個問題:“為什麼要寫部落格?為什麼要擁有一個公開的網站讓人們閱讀呢?” 我從 2007 年開始以不同的形式寫部落格。我曾經寫過一個關於網頁開發的意大利語部落格,後來放棄並關閉了部落格,然後在 2010 年代中期重新開始以英文寫部落格,但沒有什麼嚴肅的意圖,直到 2018 年我才全力以赴寫部落格。 在過去的五年裡,我一直很積極地寫部落格,除非有一段時間我把寫部落格擱置一邊,全力投入其他項目。但寫部落格是我內心深處的熱情。 我不能告訴人們“為什麼你應該寫部落格”,但我可以告訴你我為什麼有一個部落格。 部落格是我在網絡上的小天地。 這是我唯一完全控制的公開空間。 我並不控制我在 YouTube 的頻道。當然,我決定錄製哪些視頻,但 YouTube 有限制並最終具有最終控制權 - 例如,如果你的 Google 帳戶違反了任何它們制定的規則,你的帳戶可能被封禁。或者一段視頻可能因為任何原因被刪除。 我並不控制我的 Twitter。我決定發布什麼,但最終它是 Twitter 的財產。如果 Twitter 倒閉,我的 Twitter 帳戶也會一併消失。 部落格是我的。我擁有域名,我擁有內容,我決定在部落格上展示什麼,什麼不展示。 我不受算法的控制。 在 Twitter 上,你可能在虛無中推文多年,基本上就像你根本沒有推文一樣。在 YouTube 上,你應該保持持續性的發佈,否則頻道不會有太多的觀看次數。在部落格上,我可以隨心所欲。 當然,在部落格上,如果我想在網絡上被“看見”,我仍然需要遵守 Google SEO 的良好實踐,但那只是在網絡上被“看見”的一種方式。 而且談到被“看見”,實際上這並不是關於被“看見”。 而是關於有幫助。 當我寫一篇部落格文章時,有時是因為我不希望那些知識被遺失。 我想把它寫下來。 它可能是一個非常簡單的事情,比如用 JavaScript 做些什麼。 或者也許我正在學習一個新的框架或編程語言,因為我學習的方式是試圖教給其他人,所以我用寫作的方式來實現這一點。 它對我有幫助,也對其他人有幫助。 它就像是我的個人筆記本。 能幫助別人真的很好。如果人們發現我的工作有幫助,這是令人滿足的。 當然,如果沒有人閱讀你的部落格,可能會有一點孤獨,或者顯得毫無意義。 我覺得你需要至少有一些讀者。 我想這是人性的一部分。 一幅畫可能是一個傑作,但如果沒有人知道它呢? 一本書對很多人來說可能是改變生命的,但如果沒有人知道呢? 你可能有最美麗的聲音,但如果沒有人聽到你唱歌呢? 即使這一切都很好,但如果它不能為某人創造一些東西,這就有點可惜了。無論是啟發,有用,帶來積極的變化,或者僅僅幫助解決問題。 對於一個部落格也是一樣的。你應該在乎人們來讀你寫的東西。 這樣更有趣。 它給你提供多巴胺的提升,讓你更有動力去寫更多。 這在兩方面都很有趣,因為很多時候寫作對你的幫助比對讀者的幫助更大。 它幫助你澄清你的思緒。 我沒有預料到上面那句話。我只是從第一句開始寫,然後隨著思維的流暢進行。 在網絡上,我們形成了一個大家庭,雖然我們彼此不認識。 閱讀別人的部落格給了我無法估量的價值。無論是關於任何事情。 所以在自己的部落格上寫作就像是回饋給網絡和它的使用者一樣。玩得開心。...

為什麼選擇 iOS

為什麼我選擇深入研究 iOS 呢? 難道我放棄了 Web 開發嗎?當然不是。 Swift 為我帶來了一個全新且令人興奮的世界。 我不是一個 Web 開發人員,我是一個開發人員。無論最終形式是什麼,我的目標是幫助人們成為開發人員。 我有很多想要建立的應用程序的點子,我可以創建它們並解釋如何實現。 我認為很多人都想要建立一個 iOS 應用程序,但這並不是一件簡單的事情。 iOS 應用程序在很多方面都與 Web 應用程序非常不同。 首先,是分發方式。在 Web 上,你擁有自己的域名,你的應用程序就在那裡。而且你可以做任何合法的事情。在 iOS 上,只有 Apple App Store,而且 Apple 對其有很大的控制權。他們可以決定拒絕你的應用程序。 然後是技術堆棧。在 Web 上,你有 JavaScript、HTML 和 CSS,除非你使用一些小眾工具。而在 iOS 上,你有 Swift 和 SwiftUI。 再者,Web 是一個開放的平台,而 iOS 則是封閉的,完全受 Apple 控制。 還有一個很大的區別:你可以創造的類型。在 Web 上,你創建 Web 應用程序,它們存在於瀏覽器中。在 iOS 上,你創建的是移動應用程序,這些應用程序可以隨時隨地帶在身上。這些應用程序可以通過傳感器更好地融入你的生活,它們可以存在於你的手錶上(我說 iOS 但我的意思是所有的移動 Apple 平台:iPhone、iPad、手錶,不包括不同的 Mac)。 所以,對我而言,開始創建 iOS 應用程序更像是創建 Web 上無法實現的應用程序的一種方式,也是進入這個有趣的開發領域的途徑。

為什麼選擇博客而不是視頻或播客?

在過去的幾年裡,視頻和播客都有了巨大的增長。 尤其是視頻非常受歡迎。孩子們長大後都想成為YouTuber。 視頻和播客都很棒。我每天都看YouTube,也訂閱了幾個播客。 不過,我注意到這些平台有一個共同的問題。播客很難被發現。我只有在某個地方看到有人提到時,才會發現新的播客。或者是透過口耳相傳。 此外,作為一個播客的擁有者,聲音語調也是讓我喜歡或不喜歡一個播客的區別因素。你要麼生來就有一個很好的播客聲音,要麼就沒有。 對於視頻也是一樣。創作者的個性是一個很好的YouTube頻道的獨特區別因素。 另外,如果做得好,視頻需要非常大的時間、精力和設備投入。 而博客不同,只要你會寫作,無論你是誰,都可以寫博客。你不需要具備在YouTube上讓人喜歡的獨特特質,並且你不會被困在一個平台上(YouTube)。你還有一個很好的渠道來有機地發現你的博客文章(Google)。稍後會詳細介紹。 但當然,你不需要在兩者之間選擇。 很多時候,創作者除了YouTube頻道或播客之外,還會使用博客。如果你能更好地利用博客,而不僅僅是在不同平台之間互相轉載內容,這對你將會非常有幫助。 當做得好時,這是一個非常強大的組合。

訂閱數無用的虛榮指標,參與度才是重要的。

作為人類,容易陷入虛榮指標的迷戀。 我們在世界上用很多數字來量化和衡量一切,所以使用這些數字作為我們自己的指標是很有道理的。 在網絡上,作為一個"內容創作者",我追踪一些指標,以幫助我對自己的成績有所了解。 有很多觀點可以看待事物。我使用數字,因為我是受過工程師培訓的。這並沒有對錯之分。你可能認為數字是毫無意義的。對我來說,它們是有意義的。 但有時候這些數字是具有誤導性的,可能會把我們引入錯誤的方向。 當數字變成虛榮指標時,這種情況就會發生。 一些虛榮指標是默認公開的。我們可以使用它們與他人進行比較。而且人們也可以使用它們來與我們進行比較。例如YouTube的訂閱者數量、Twitter的關注者數量或Facebook頁面上的讚數。 還有一些虛榮指標是默認私有的,例如郵件訂閱者。 儘管是私有的,它們可能成為衡量我們的方式,評估我們的價值。例如,James Clear擁有數百萬的郵件訂閱者,他是這麼說的。如果我只有100個郵件訂閱者,這是否意味著我價值是他的1/10,000?當然不是。 但這可能使我在經濟層面上知名度少10,000倍,成功機會少10,000倍。 這些指標,無論是公開的還是私有的,都在高估它們對你的影響。 我相信你也看過這種情況:YouTube頻道擁有數十萬訂閱者,但每個視頻可能只有幾千次觀看。 或者Twitter帳戶有很多的關注者,但是推文獲得的點讚、轉推或回復非常少。 真正重要的是參與度的百分比。 對於像Twitter或YouTube這樣的社交媒體平台,你無法做太多事情。這些平台並未提供太多的數據。 對於電子郵件通訊,大多數工具通常提供開封率。您可以看到誰打開了您的郵件。這涉及一些隱私問題,但也很有用。 因為在某個時刻,您可以決定停止向那些不閱讀您郵件的人發送郵件。為什麼要給不打開郵件的人發送郵件呢? 如果您有10,000個郵件訂閱者,這不是您應該關注的指標。真正重要的是那3,000或4,000個實際上打開這些郵件的人。您不是擁有10,000個訂閱者,而是擁有4,000或5,000個訂閱者,這些人在過去的6個月內至少打開過您的郵件。

迭代Hugo章節的頁面

我需要在Hugo中遍歷特定章節的頁面,這意味著markdown檔案放在content文件夾下的一個文件夾中,例如content/mysection。 這是實現的程式碼: {{ range (where .Site.Pages "Section" "mysection") }} {{ range .Pages }} {{ .RelPermalink }} - {{ .Title }} {{ end }} {{ end }}

重新啟動 Node 進程,而不更改檔案

我有需要運行一個 Node 專案,如果出現某些原因失敗,可以再次運行它。 我想到使用 nodemon,它是當檔案發生變化時重新啟動 Node 進程的方式。 我以為它也會在進程崩潰時重新啟動,但事實並非如此。 因此,我找到了這個解決方案。 如果進程崩潰,我使用命令行在主要應用檔案上運行 touch 命令,這樣 nodemon 就會檢測到檔案的變化並重新啟動進程: nodemon -x 'node app.js || touch app.js' 簡單而有效。 當然,在真實的環境中,你會使用像 pm2 這樣的強大解決方案(請參考我的教程如何使用 pm2 運行 Node.js 應用程式),但這對於我在本機運行幾小時的需求來說是有效的。 更新:另一個選擇是使用 Forever https://www.npmjs.com/package/forever