一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在樹莓派上構(gòu)建和部署 Node.js 項(xiàng)目

上海晶珩電子科技有限公司 ? 2025-03-25 09:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

探索在Raspberry Pi上構(gòu)建和部署Node.js項(xiàng)目的最佳實(shí)踐。通過我們的專業(yè)提示和技巧,克服常見挑戰(zhàn),使您的項(xiàng)目順利運(yùn)行。

去年圣誕節(jié),我收到了一份極其令人著迷的禮物,它占據(jù)了我許多周末的時(shí)間,甚至讓我夜不能寐。它就是全新的Raspberry Pi Zero。

它帶來了無窮無盡的可能性,并且情不自禁占據(jù)著我的大腦,所以我采取了唯一明顯的行動(dòng)方案就是把它扔進(jìn)抽屜里,然后慢慢遠(yuǎn)離它。幾個(gè)月后,我讀到了同為雙面間諜的Adam Lukens的一篇精彩文章。那篇文章給了我所需的鼓舞,讓我卷起袖子,拂去Raspberry Pi上的灰塵,開始工作。為了額外的挑戰(zhàn),我決定在我的項(xiàng)目中加入Node.js。我將其稱為Tot Tunes。

我只用了一兩個(gè)小時(shí)就建立了一個(gè)可行原型,并短暫地感覺自己像個(gè)超級(jí)英雄。然后我發(fā)現(xiàn)了一個(gè)錯(cuò)誤。我修復(fù)了那個(gè)錯(cuò)誤,但又出現(xiàn)了許多其他小問題。如果斷電或拔下電源怎么辦?因此,我通過一系列的學(xué)習(xí),并為我的小項(xiàng)目建立了一個(gè)工具庫。我想分享的不僅僅是構(gòu)建Tot Tunes本身的經(jīng)驗(yàn)。這要?dú)w功于Adam詳細(xì)的文章。我希望降低門檻,讓更多人能夠構(gòu)建出色的產(chǎn)品,并滿懷信心地運(yùn)行它們,而無需經(jīng)歷我在項(xiàng)目中遇到的痛苦。

如果您想一邊閱讀本文一邊動(dòng)手構(gòu)建一些東西,您需要一臺(tái)安裝了Raspbian的Raspberry Pi、對(duì)JavaScript基礎(chǔ)有合理的掌握,以及安裝Node.js。我們還將進(jìn)行少量的shell腳本編寫。

我構(gòu)建了一個(gè)Node.js項(xiàng)目

您可能有一個(gè)一直渴望構(gòu)建的小項(xiàng)目,如果沒有,我為您準(zhǔn)備了一個(gè)簡單的Node.js服務(wù)。請(qǐng)前往此處克隆項(xiàng)目,并按照自述文件中的說明進(jìn)行設(shè)置。

如何部署?

部署Node.js項(xiàng)目的最顯而易見的方法是在Raspberry Pi上安裝Node.js,然后開始編寫代碼。有些工作流程可能很適合這種方法,但我知道我很快就會(huì)懷念筆記本電腦的強(qiáng)大功能和便捷性。另一種常見的方法是在筆記本電腦上編寫代碼,然后將代碼復(fù)制到Raspberry Pi上并運(yùn)行npm install && npm start。每次更新代碼時(shí),只需復(fù)制代碼并重新啟動(dòng)服務(wù)即可。雖然這不是世界上最糟糕的情況,但我認(rèn)為一定有另一種更好的方法。其中一個(gè)問題是,我受限于Raspbian軟件包存儲(chǔ)庫中可用的Node.js版本,因?yàn)槲蚁胧褂酶掳姹镜腘ode.js來提高性能和功能。解決此問題的常見方法是使用像nodenv這樣的工具來管理Node.js版本。但我意識(shí)到可以有不同的選擇。我是繼續(xù)在Raspberry Pi上管理所有這些基礎(chǔ)設(shè)施,還是嘗試尋找一種更簡單的方法?我最近聽說了一個(gè)項(xiàng)目,該項(xiàng)目將軟件包與Node.js運(yùn)行時(shí)捆綁在一起,以便您可以將應(yīng)用程序作為獨(dú)立的可執(zhí)行文件分發(fā)。這最終解決了我的許多問題。您可以在GitHub上的zeit/pkg找到該工具。由于我現(xiàn)在處理的是二進(jìn)制可執(zhí)行文件,因此我知道我需要獲取一個(gè)適用于Raspberry PiCPU架構(gòu)的Linux二進(jìn)制文件。初步測試表明,從理論上講,pkg支持這些限制條件,但出現(xiàn)了一條錯(cuò)誤信息。

nodenv:https://github.com/nodenv/nodenv

zeit/pkg:https://github.com/vercel/pkg

錯(cuò)誤!無法在此處為'armv7'構(gòu)建,僅能為'x64'構(gòu)建

經(jīng)過一番挖掘,我在github上找到了這個(gè)問題的評(píng)論。它表明,只要我的依賴項(xiàng)是純JavaScript,我就可以通過一個(gè)標(biāo)志告訴pkg不要將結(jié)果編譯為字節(jié)碼,即pkg ... --no-bytecode。構(gòu)建成功,所以我把二進(jìn)制文件復(fù)制到了Raspberry Pi上。它起作用了!我再也不用擔(dān)心部署和開發(fā)版本的Node.js同步問題了。我可以直接將這些配置檢入git。

問題的評(píng)論:https://github.com/vercel/pkg/issues/145#issuecomment-311150484

它起作用了!但它剛剛崩潰了...

我住在龍卷風(fēng)巷附近。幸運(yùn)的是,我的附近從來沒有真正發(fā)生過龍卷風(fēng)。但不幸的是,每年都會(huì)有暴風(fēng)雨來臨,然后就會(huì)停電。有時(shí)這只是電壓波動(dòng)造成的短暫停電,但無論如何,我的沒有電池的Raspberry Pi都會(huì)在沒有警告的情況下重新啟動(dòng)。關(guān)鍵是,我的Raspberry Pi服務(wù)需要為大自然帶來的任何事情做好準(zhǔn)備。由于我使用的是Raspbian,因此systemd似乎是完成這項(xiàng)工作的合適工具。我不知道如何編寫systemd服務(wù),但這似乎是學(xué)習(xí)的完美借口。它實(shí)際上非常容易制作!命令行界面非常直觀,您只需創(chuàng)建一個(gè)描述如何運(yùn)行服務(wù)的文件即可。

[Unit]Description=TotTunes
[Service]User=piExecStart=/usr/local/bin/tot-tunesType=simpleRestart=always
[Install]WantedBy=multi-user.target

將該文件放置在/etc/systemd/system/目錄中。然后運(yùn)行以下命令。

systemctl daemon-reloadsystemctl enable tot-tunes.serviceservice tot-tunes start

通過這種簡單的配置,您可以獲得一個(gè)在重啟和崩潰時(shí)自動(dòng)重啟的服務(wù)。另外,它還可以通過journalctl接口輕松訪問應(yīng)用程序的日志。

任務(wù)完成了嗎?

在Raspberry Pi(Raspberry Pi)項(xiàng)目上進(jìn)行開發(fā)既有趣又有點(diǎn)讓人上癮。但如果你像我一樣,我們還渴望在我們小小的物聯(lián)網(wǎng)霸主之外擁有自己的生活,所以并沒有總是有時(shí)間花幾個(gè)小時(shí)來學(xué)習(xí)一個(gè)新的操作系統(tǒng)編程語言。

我們需要快速實(shí)現(xiàn)一個(gè)想法,這樣我們就可以繼續(xù)我們的生活,只需稍微多一點(diǎn)的JS自動(dòng)化,因?yàn)槟阌肋h(yuǎn)不會(huì)有太多的JS。

雖然我部分選擇Node.js是作為一種有趣的挑戰(zhàn),但我認(rèn)為它對(duì)于物聯(lián)網(wǎng)新手來說還有其他優(yōu)勢。一方面,幾乎每個(gè)人都知道一點(diǎn)JS,所以這是讓那些想要快速提高生產(chǎn)力的人們的一條途徑。如果你不是JS的粉絲,那么有大量的工具可以幫助你編寫TypeScript、CoffeeScript和許多其他可以編譯成JS的語言。npm有成千上萬的包,所以你可以借鑒他人的工作成果,而pkg允許我們將所有這些打包成一個(gè)可執(zhí)行二進(jìn)制文件,無需安裝任何必要的依賴項(xiàng)。

即使在你的下一個(gè)Raspberry Pi項(xiàng)目上使用Node.js和pkg有充分的理由,但在投入這個(gè)平臺(tái)之前,你還是要權(quán)衡一下成本和收益。Node.js是一個(gè)相當(dāng)大的依賴項(xiàng),在二進(jìn)制文件中包含運(yùn)行時(shí)環(huán)境會(huì)創(chuàng)建超過30MB的文件。這會(huì)減慢部署速度,因?yàn)槟惚仨殏鬏斦麄€(gè)二進(jìn)制文件,而不僅僅是一些文本文件。此外,像任何解釋型語言一樣,你可能會(huì)遇到應(yīng)用程序性能不可接受的情況。

這種設(shè)置非常適合啟動(dòng)一個(gè)簡單的服務(wù),但我認(rèn)為我們可以繼續(xù)改善Raspberry Pi和Node.js的體驗(yàn)。在為Raspberry Pi構(gòu)建軟件時(shí),最大的矛盾之一是,你可以通過在設(shè)備本身上進(jìn)行開發(fā)來獲得快速且更高保真度的反饋,但你可能沒有習(xí)慣使用的所有好工具。如果你選擇在舒適的筆記本電腦上構(gòu)建軟件,那么每次你想在Raspberry Pi上測試代碼時(shí),都可能會(huì)經(jīng)歷等待部署的痛苦。

另一個(gè)困擾是設(shè)置服務(wù)配置的繁瑣。在Raspberry Pi上手動(dòng)編輯文件的過程很容易耗費(fèi)你本來可以用來構(gòu)建你熱愛的東西的幾個(gè)小時(shí)的時(shí)間。一個(gè)相關(guān)的問題是分發(fā)。如果你的非技術(shù)朋友來訪并注意到了你的酷炫新玩意怎么辦?如果你為別人建了一個(gè)項(xiàng)目,并且需要更新它怎么辦?

這個(gè)領(lǐng)域充滿了機(jī)遇,我很高興能繼續(xù)學(xué)習(xí)、建設(shè)和與你們分享。如果你正在用Raspberry Pi做令人興奮的事情,并且這些與你產(chǎn)生了共鳴,請(qǐng)與我聯(lián)系!關(guān)注樹莓派開發(fā)者,了解更多樹莓派相關(guān)內(nèi)容!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Raspberry Pi
    +關(guān)注

    關(guān)注

    2

    文章

    620

    瀏覽量

    23146
  • 樹莓派
    +關(guān)注

    關(guān)注

    121

    文章

    2011

    瀏覽量

    107495
  • NODE.JS
    +關(guān)注

    關(guān)注

    1

    文章

    49

    瀏覽量

    33263
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Node.js 給前端帶來了什么

    語言”,他們將會(huì)想如此重要的服務(wù)端工作怎么能交給這群看起來不太靠譜的人用如此“不嚴(yán)肅”的語言來玩?我的經(jīng)驗(yàn)里,這種觀念上的沖突是前后端工程師們是否引入Node.js這一問題上的最大分歧。Server
    發(fā)表于 05-06 14:23

    【Intel Edison試用體驗(yàn)】XDK篇:Node.js操作SQLite3

    test.db數(shù)據(jù)庫,test.db是我上帖建的一個(gè)數(shù)據(jù)庫查詢命令用db.all(),創(chuàng)建數(shù)據(jù)庫,數(shù)據(jù)表用db.run();如我使用sqlite3的select*from scene;node.js
    發(fā)表于 07-25 09:39

    【orangepi zero試用體驗(yàn)】安裝Node.JS運(yùn)行環(huán)境與示例

    本帖最后由 eyecf 于 2016-12-24 17:51 編輯 本期要和大家介紹一下OrangePI zero安裝Node.js運(yùn)行環(huán)境的方法,并運(yùn)行一下vuejs的實(shí)例Node.js
    發(fā)表于 12-24 17:07

    深入淺出Node.js迷你書

    [InfoQ]深入淺出Node.js迷你書
    發(fā)表于 11-04 15:50 ?0次下載

    node.jsjs要點(diǎn)總結(jié)

    (Non-blocking)或異步I/O 由于Node.js一個(gè)服務(wù)器端框架,所以它主要工作之一是處理瀏覽器請(qǐng)求。傳統(tǒng)的I/O系統(tǒng)中,每個(gè)請(qǐng)求的發(fā)出都是在上一請(qǐng)求到達(dá)之后才發(fā)出的。所以這被稱為阻塞
    發(fā)表于 10-13 10:39 ?0次下載

    node.js訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型識(shí)別圖像中物體的方法

    如何在Node.js環(huán)境下使用訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型(Inception、SSD)識(shí)別圖像中的物體。
    的頭像 發(fā)表于 04-06 13:11 ?9538次閱讀

    第3部分:使用NoDE.JS的程序

    Implement MQTT to publish temperature data using Node.js*.
    的頭像 發(fā)表于 10-26 07:16 ?2056次閱讀

    Node.js 內(nèi)存泄漏問題初探

    作者 | 后端Team朱捷峰整理 | 包包V8 垃圾回收機(jī)制事實(shí)上,我們平時(shí)Node.js 的時(shí)候很少去關(guān)心內(nèi)存問題,那是因?yàn)?Node.js 對(duì) Google V8 進(jìn)行封裝,底層的垃圾收回
    的頭像 發(fā)表于 11-01 13:39 ?4974次閱讀

    Node.js的九大后端框架你都知道嗎

    Nest 是一個(gè)用于構(gòu)建高效,可擴(kuò)展的 Node.js 服務(wù)器端應(yīng)用程序的框架。
    發(fā)表于 04-26 17:40 ?3516次閱讀
    <b class='flag-5'>Node.js</b>的九大后端框架你都知道嗎

    Raspberry Pi中利用Node-RED控制LED

    今天的教程中,我們將研究如何使用 Node-RED 樹莓派上部署簡單的項(xiàng)目。
    的頭像 發(fā)表于 09-01 16:00 ?6817次閱讀
    <b class='flag-5'>在</b>Raspberry Pi中利用<b class='flag-5'>Node</b>-RED控制LED

    Node.js網(wǎng)頁控制的機(jī)器人小車

    電子發(fā)燒友網(wǎng)站提供《Node.js網(wǎng)頁控制的機(jī)器人小車.zip》資料免費(fèi)下載
    發(fā)表于 02-08 16:06 ?0次下載
    <b class='flag-5'>Node.js</b>網(wǎng)頁控制的機(jī)器人小車

    介紹Node.js應(yīng)用全鏈路信息獲取的方法

    這種技術(shù),就是Node.js應(yīng)用全鏈路追蹤。它是 Node.js 涉及到復(fù)雜服務(wù)端業(yè)務(wù)場景中,必不可少的技術(shù)保障。
    的頭像 發(fā)表于 02-10 11:21 ?879次閱讀

    node.js實(shí)戰(zhàn)源碼

    node.js實(shí)戰(zhàn)源碼
    發(fā)表于 05-16 18:06 ?1次下載

    Node.js小科普和Node.js安裝常見管理工具

    Node.js是一個(gè)JavaScript的運(yùn)行環(huán)境,用來執(zhí)行JavaScript代碼。 為什么會(huì)出現(xiàn)這么一個(gè)運(yùn)行環(huán)境呢,從JavaScript研發(fā)初衷可以看出它是為了運(yùn)行在瀏覽器中的,讓網(wǎng)頁交互更加
    的頭像 發(fā)表于 11-23 15:37 ?426次閱讀
    <b class='flag-5'>Node.js</b>小科普和<b class='flag-5'>Node.js</b>安裝常見管理工具

    Bun 1.2震撼發(fā)布:全力挑戰(zhàn)Node.js生態(tài)的JavaScript運(yùn)行時(shí)新星

    了與 Node.js 的兼容性,還為開發(fā)者帶來了內(nèi)置的數(shù)據(jù)庫支持和云服務(wù)集成能力,進(jìn)一步強(qiáng)化了其“全能工具包”的定位。Node.js 兼容性獲得突破性進(jìn)展在此次更新中,最引人注目的是 Bun
    的頭像 發(fā)表于 01-24 10:42 ?867次閱讀
    Bun 1.2震撼發(fā)布:全力挑戰(zhàn)<b class='flag-5'>Node.js</b>生態(tài)的JavaScript運(yùn)行時(shí)新星