摘要
在鴻蒙(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 的 fs
、path
等模塊,在鴻蒙里是跑不通的。大多數純函數工具庫(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 環境強綁定的庫不適合在鴻蒙中跑。
這樣做的好處是開發效率更高,老代碼能復用,鴻蒙應用的邏輯層更簡潔。