You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Yocto中用Shell函数覆盖继承的NPM相关Python函数?

解决Yocto中仅将NPM包构建产物打入镜像的问题

核心思路

保留inherit npm以获取必要的构建环境(避免移除后的依赖报错),通过重写构建/安装步骤、调整文件打包规则,仅将npm run build的产物纳入镜像。

具体实现步骤

  1. 保留npm继承
    不要移除inherit npm,这条指令会自动引入Yocto提供的nodejs、npm工具链及构建所需的变量配置,是避免报错的关键。

  2. 重写编译步骤,执行构建命令
    在配方中覆盖do_compile函数,明确执行构建命令生成产物:

    do_compile() {
        npm run build
    }
    

    注:如果你的项目构建命令不是npm run build,替换为实际命令即可。

  3. 重写安装步骤,仅复制构建产物
    覆盖do_install函数,只将构建产物(通常在dist目录,根据项目调整路径)复制到目标安装路径,忽略源码、node_modules等无需打包的内容:

    do_install() {
        install -d ${D}${datadir}/${PN}
        cp -r ${S}/dist/* ${D}${datadir}/${PN}/
    }
    
    • ${D}是Yocto的目标根目录变量,${datadir}对应系统共享数据目录(通常为/usr/share),${PN}是当前包名。
    • 若构建产物在其他目录,替换${S}/dist为实际路径即可。
  4. 调整文件打包规则
    设置FILES_${PN}变量,明确指定镜像中仅包含安装的构建产物,排除默认的npm相关文件:

    FILES_${PN} = "${datadir}/${PN}/"
    

完整配方示例

SUMMARY = "自定义NPM项目构建产物包"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=xxxxxxxxxxxxxx"

SRC_URI = "git://github.com/your/repo.git;branch=main"
S = "${WORKDIR}/git"

inherit npm

do_compile() {
    npm run build
}

do_install() {
    install -d ${D}${datadir}/${PN}
    cp -r ${S}/dist/* ${D}${datadir}/${PN}/
}

FILES_${PN} = "${datadir}/${PN}/"

关键说明

  • 默认的npm_do_configure会执行npm install安装构建依赖,这一步仅在构建机器上完成,不会被打包进镜像,无需额外处理。
  • 若之前覆盖函数时报错,检查是否在inherit npm之后定义重写函数,同时确保函数语法符合Yocto的Shell脚本规范(无语法错误、变量引用正确)。

内容的提问来源于stack exchange,提问作者Jomaar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:25:51