如何在Yocto中安装AngularJS?为何指定包名后无法完成安装?
在Yocto中正确安装AngularJS的解决方案
看起来你踩了Yocto里很常见的一个坑——软件包名称和我们日常叫的名字不匹配,而且AngularJS这类前端库默认也不会包含在基础Poky层里。我来一步步帮你解决这个问题:
1. 先确认是否有现成的可用Recipe
你遇到的安装失败,大概率是包名称不正确导致的。Yocto的软件包命名规则有时候和软件本身的官方名称有差异,而且很多前端库不会默认包含在基础的Poky层中。
先在你的Yocto构建环境里运行这条命令,搜索所有和Angular相关的可用Recipe:
bitbake-layers show-recipes "*angular*"
如果命令输出里能找到对应的Recipe,那它显示的名称就是你需要加到IMAGE_INSTALL_append里的正确包名。
2. 如果没有现成Recipe,手动创建AngularJS的Recipe
如果上面的命令没有返回任何结果,说明你的Yocto layers里没有AngularJS的Recipe,需要我们自己动手创建。因为AngularJS是npm包,我们可以利用Yocto自带的npm.bbclass来快速生成:
步骤2.1 新建Recipe文件
在你自己的自定义layer中(比如meta-yourlayer/recipes-web/angularjs/,没有这个目录就手动新建),创建一个名为angularjs_1.8.2.bb的文件(版本号可以换成你需要的AngularJS版本),内容如下:
SUMMARY = "AngularJS - HTML enhanced for web apps" HOMEPAGE = "https://angularjs.org/" LICENSE = "MIT" # 注意:替换下面的md5值为你对应版本LICENSE文件的实际md5 LIC_FILES_CHKSUM = "file://LICENSE;md5=2d7f04a77d56f5a9a26f09f06d7e3417" SRC_URI = "npm://registry.npmjs.org;name=angular;version=${PV}" S = "${WORKDIR}/npm" inherit npm # 自定义安装路径,把AngularJS的dist文件放到系统的js目录下 FILES_${PN} += "${datadir}/javascript/angularjs/*" do_install_append() { install -d ${D}${datadir}/javascript/angularjs cp -r ${S}/dist/* ${D}${datadir}/javascript/angularjs/ }
步骤2.2 验证并构建
- 获取LICENSE的md5值:先下载你指定版本的AngularJS包,提取里面的LICENSE文件,用
md5sum LICENSE命令得到它的md5值,替换到上面的Recipe中。 - 把这个Recipe放到自定义layer的对应目录后,重新运行
bitbake-layers show-recipes "*angular*",应该能看到新添加的angularjsRecipe了。 - 然后在
conf/local.conf里添加正确的包名:
IMAGE_INSTALL_append = " angularjs"
- 最后重新构建你的镜像:
bitbake your-image-name
3. 常见问题排查
- 如果构建时提示找不到
npm.bbclass,请确认你的layer依赖了meta-openembedded/meta-webserver层,这个class通常在该层中。 - 旧版本的Yocto(比如低于Dunfell版本)可能对npm的支持不够完善,如果遇到问题,建议升级到较新的Yocto版本。
内容的提问来源于stack exchange,提问作者Aysha
相关产品推荐
相关产品推荐

