HarmonyOS 實戰:學會在鴻蒙中使用第三方 JavaScript 庫(附完整 Demo)

在這里插入圖片描述

摘要

在鴻蒙(HarmonyOS NEXT / ArkTS)開發中,我們大部分業務邏輯和 UI 都是用 ArkTS 寫的。不過在做一些數據處理、網絡請求、工具函數或者復雜算法時,完全沒必要“重復造輪子”。這時候就可以直接引入 JavaScript 的第三方庫。鴻蒙官方已經支持通過 ohpm(OpenHarmony Package Manager)來管理依賴,就像以前在 Node.js 里用 npm 一樣,幾乎無縫銜接。

引言

很多同學第一次寫鴻蒙項目時,會覺得 ArkTS 和 JS 是兩個“平行世界”。實際上,鴻蒙框架允許 ArkTS 和 JS 混合使用,你可以很輕松地在 ArkTS 組件里 import 第三方庫,比如 lodash 做數組處理、axios 做 HTTP 請求,甚至還可以引入你以前寫過的老 JS 工具文件。這樣一來,鴻蒙的開發效率就能和 Web 開發一樣爽。

如何在鴻蒙中引入第三方 JS 庫

使用 ohpm 安裝依賴

在項目根目錄下執行:

ohpm install lodash axios

安裝完成后,oh_modules 下會有對應的依賴包。

在 ArkTS 文件中直接使用

比如我們要在頁面里用 lodash.shuffle() 打亂數組,并且用 axios 調接口:

// Index.ets
import _ from 'lodash'
import axios from 'axios'@Entry
@Component
struct Index {@State list: number[] = [1, 2, 3, 4, 5]@State joke: string = '點擊按鈕獲取笑話'build() {Column({ space: 20 }) {Text('原始數組: ' + JSON.stringify(this.list))Text('打亂后: ' + JSON.stringify(_.shuffle(this.list)))Button('獲取網絡數據').onClick(() => {this.fetchJoke()})Text(this.joke).fontSize(16).lineHeight(24).padding(10)}.padding(20)}async fetchJoke() {try {let res = await axios.get('https://v2.jokeapi.dev/joke/Any?type=single')this.joke = res.data.joke} catch (err) {this.joke = '請求失敗: ' + JSON.stringify(err)}}
}

運行效果:

  • 頁面初始顯示原始數組和打亂后的數組。
  • 點擊按鈕后,會調用 axios 請求在線 API 并把笑話顯示出來。

實際應用場景

數據處理場景:復雜數組和對象操作

假設你要在鴻蒙 App 里展示一個電商商品列表,需要做排序、去重和分組操作。手寫邏輯很麻煩,用 lodash 就很輕松。

import _ from 'lodash'let products = [{ id: 1, category: '手機', price: 3999 },{ id: 2, category: '電腦', price: 6999 },{ id: 3, category: '手機', price: 1999 }
]// 按類別分組
let grouped = _.groupBy(products, 'category')
// 按價格排序
let sorted = _.sortBy(products, 'price')

在鴻蒙里渲染時就能直接綁定分組后的數據,邏輯簡潔很多。

網絡請求場景:統一接口調用

很多項目需要和后端 API 通信,ArkTS 自帶 http 模塊,但 axios 更加方便,比如攔截器、全局配置。

import axios from 'axios'// 全局配置
const api = axios.create({baseURL: 'https://api.example.com',timeout: 5000
})// 攔截器
api.interceptors.response.use(res => res.data,err => Promise.reject(err)
)// 調用接口
async function getUserInfo(userId: number) {return api.get(`/users/${userId}`)
}

這樣封裝后,在鴻蒙項目里隨處調用 getUserInfo 即可。

本地工具庫場景:復用老 JS 文件

如果你之前寫過一些工具函數,比如日期格式化、加密解密,可以直接放在項目里:

entry/src/main/resources/rawfile/utils.js

然后在 ArkTS 文件里引入:

import { formatDate } from '../resources/rawfile/utils.js'let today = formatDate(new Date())

這種方式能避免重復寫邏輯,直接把老項目里的 JS 文件“搬”過來用。

QA 環節

Q1:所有 npm 包都能直接用嗎?
不完全。ArkTS 和 Node.js 運行環境不同,如果庫依賴了 Node.js 的 fspath 等模塊,在鴻蒙里是跑不通的。大多數純函數工具庫(lodash、dayjs、axios)都能正常使用。

Q2:UI 組件庫(比如 React、Vue 插件)能用嗎?
不行。ArkTS 的 UI 渲染和 Web 完全不同,這類庫沒法直接跑。你只能用數據處理類庫。

Q3:那什么時候應該用 JS 庫,什么時候用 ArkTS?
UI 和系統 API 調用建議用 ArkTS;數據處理、網絡請求、工具函數類邏輯,用 JS 庫更合適。

總結

在鴻蒙項目中引入第三方 JavaScript 庫非常簡單:用 ohpm install 安裝依賴,然后直接在 ArkTS 里 import 使用。適合的場景包括:復雜數據處理(lodash)、網絡請求(axios)、以及復用本地 JS 工具文件。要注意的是,和 Node.js 環境強綁定的庫不適合在鴻蒙中跑。

這樣做的好處是開發效率更高,老代碼能復用,鴻蒙應用的邏輯層更簡潔。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93836.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93836.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93836.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++實現教務管理系統,文件操作賬戶密碼登錄(附源碼)

教務管理系統項目介紹 項目概述 這是一個基于C開發的教務管理系統,提供了學生、教師和系統管理員三種角色的功能模塊,實現了教務信息的錄入、查詢、修改和刪除等基本操作。系統采用文件存儲方式保存數據,具有簡單易用、功能完備的特點。 項…

《C++進階之STL》【二叉搜索樹】

【二叉搜索樹】目錄前言:------------概念介紹------------1. 什么是二叉搜索樹?2. 二叉搜索樹的性能怎么樣?------------基本操作------------一、查找操作思想步驟簡述二、插入操作目標步驟簡述三、刪除操作目標步驟簡述------------代碼實現--------…

Orange的運維學習日記--47.Ansible進階之異步處理

Orange的運維學習日記–47.Ansible進階之異步處理 文章目錄Orange的運維學習日記--47.Ansible進階之異步處理Playbook 執行順序原理可選執行策略調整并發連接數:forks 參數查看與修改 forks性能調優建議分批執行全局任務:serial 關鍵字serial 用法示例應…

從一個ctf題中學到的多種php disable_functions bypass 姿勢

題目介紹 題目是Lilctf2025 的php-jail-is-my-cry 比賽鏈接:https://lilctf.xinshi.fun/ 題目環境前半部分是 php最近的phar 新 trick 大佬的原理分析 https://fushuling.com/index.php/2025/07/30/%e5%bd%93include%e9%82%82%e9%80%85phar-deadsecctf2025-baby-we…

從繁瑣到優雅:Java Lambda 表達式全解析與實戰指南

在 Java 8 之前,我們習慣了用匿名內部類處理回調、排序等場景,代碼中充斥著大量模板化的冗余代碼。直到 Java 8 引入 Lambda 表達式,這一局面才得以徹底改變。作為一名深耕 Java 多年的技術專家,我見證了 Lambda 表達式如何從一個…

《當 AI 學會 “思考”:大語言模型的邏輯能力進化與隱憂》

引言:AI “思考” 的時代信號?大語言模型展現邏輯能力的典型場景:如復雜問題推理、多步驟任務規劃的實例(如 AI 輔助撰寫科研思路、進行案件邏輯梳理等)?提出核心議題:大語言模型邏輯能力的進化究竟達到了怎樣的程度…

企業知識管理革命:RAG系統在大型組織中的落地實踐

企業知識管理革命:RAG系統在大型組織中的落地實踐 🌟 Hello,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵,每一個特性都是我…

MySQL事務篇-事務概念、并發事務問題、隔離級別

事務事務是一組不可分割的操作集合,這些操作要么同時成功提交,要么同時失敗回滾。acid事物的四大特性原子性最小工作單元,要么同時成功,要么同時失敗。例如A轉賬300給B,A賬戶-300與B賬戶300必須滿足操作原子性,避免出現…

C++高頻知識點(二十三)

文章目錄111. 談談atomic1. 什么是原子操作?2. std::atomic 的基本使用示例:基本使用3. 原子操作方法4. 內存模型與順序一致性112. 引用成員變量是否占空間?1. 引用成員變量的定義2. 內存占用情況1. 成員變量的實際占用2. 類的總大小代碼分析113. C中深…

云存儲的高效安全助手:阿里云國際站 OSS

在這個數據爆炸的時代,數據存儲和管理成為了眾多企業和個人面臨的一大挑戰。想象一下,你是一位視頻博主,隨著粉絲量的增長,視頻素材越來越多,電腦硬盤根本裝不下,每次找素材都要花費大量時間。又或者你是一…

【線性基】P4301 [CQOI2013] 新Nim游戲|省選-

本文涉及知識點 C貪心 位運算、狀態壓縮、枚舉子集匯總 線性基 P4301 [CQOI2013] 新Nim游戲 題目描述 傳統的 Nim 游戲是這樣的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴數量可以不同)。兩個游戲者輪流操作,…

[25-cv-09610]Anderson Design Group 版權維權再出擊,12 張涉案圖片及近 50 個注冊版權需重點排查!

Anderson 版權圖案件號:25-cv-09610立案時間:2025年8月13日原告:Anderson Design Group, Inc.代理律所:Keith原告介紹原告是美國的創意設計公司,成立于1993年,簡稱ADG,一家家族企業,…

Mac下載AOSP源代碼

一、前期準備 硬件要求 至少 200GB 可用空間(源碼約 100GB,編譯產物需額外空間),推薦 SSD。 內存 16GB+,避免同步 / 編譯時卡頓。 系統要求 macOS 10.14+(推薦最新版本,兼容性更好) 二、環境配置 AOSP 源碼包含大小寫不同的文件(如 File.java 和 file.java),而 …

Linux之網絡

Linux之網絡兩個模型應用層協議HTTPS傳輸層協議UDPTCP可靠性與效率的兼顧面向字節流TCP異常情況底層實現網絡層協議IP網段劃分子網劃分NAT數據鏈路層協議以太網ARP代理服務器內網穿透五種IO多路復用Reactor模式本文旨在講解tcp-ip協議原理,并不涉及代碼部分&#xf…

MCP(模型上下文協議):是否是 AI 基礎設施中缺失的標準?

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

基于粒子群優化算法優化支持向量機的數據回歸預測 PSO-SVM

一、作品詳細簡介 1.1附件文件夾程序代碼截圖 全部完整源代碼,請在個人首頁置頂文章查看: 學行庫小秘_CSDN博客?編輯https://blog.csdn.net/weixin_47760707?spm1000.2115.3001.5343 1.2各文件夾說明 1.2.1 main.m主函數文件 該代碼實現了使用PSO…

版本更新!FairGuard-Mac加固工具已上線!

FairGuard-Mac加固工具1.0.2版本更新日志:■ 支持 AssetBundle 資源加密;■ 支持 Unity global-metadata 文件加密;AssetBundle ,是 Unity 提供的一種資源存儲壓縮包。其中儲存了游戲的資源,如圖片、模型、紋理、音視頻、代碼等文件。AssetBu…

【Linux篇章】穿越數據迷霧:HTTPS構筑網絡安全的量子級護盾,重塑數字信任帝國!

本篇摘要 本篇文章將從https是什么,為什么需要https角度,基于之前學的http[速戳速通HTTP]認識https,介紹什么是加密等,認識加密的兩種方式:對稱加密和非對稱加密;引出五種不同的通信方加密方式外加滲透證書…

數據庫:表和索引結構

表和索引是如何組織和使用的,在很大程度上取決于具體的關系型DBMS,然而它們都依賴于大致相似的結構和原則。索引頁和表頁表行和索引行都被存儲在頁中。頁的大小一般為4kb,這是一個可以滿足大部分需求的大小,也可以是其他大小&…

Java 學習筆記(基礎篇5)

1. 綜合練習(1) 抽獎public class test10 {public static void main(String[] args) {int[] arr {2,588,888,1000,10000};Random r new Random();for (int i 0; i < arr.length; i) {int randomIndex r.nextInt(arr.length);int temp arr[randomIndex];arr[randomIndex…