首页 > 解决方案 > 当您为不同的操作系统创建应用程序快照时,snapcraft nodejs 插件如何处理 Node.js 环境?

问题描述

我试图了解我用来创建 snap node.js 应用程序的 nodejs 插件如何处理 Node.js 环境?此应用程序中的示例:

parts:
  webserver: 
    source: .
    plugin: nodejs
    nodejs-version: "12.13.1"
    nodejs-package-manager: "yarn"
    nodejs-yarn-version: "v1.21.1"

我定义使用 Node.js v12.13.1 和 Yarn v1.21.1 午餐 snapcraft 命令:

snapcraft clean
snapcraft --debug

snap install my-snap-file.snap --dangerous

现在我可以在安装了 Node.js v12.2.0 的机器(amd64 Ubuntu 16.04 LTS)上运行命令/服务,但我找不到 node.js env 不在多通道实例中,不在另一台安装了 Ubuntu Core 18 的机器上,我的意思是我不能以 node --version 等方式运行命令,甚至 snap 应用程序也不能运行,既不能命令也不能服务。

我发现在 RaspBerry Pi3 上安装的 Ubuntu Core 18 环境中挖掘的其他问题是:当我在文件夹 /snap//bin 中安装我的带有 nodejs 应用程序的 snap 时,我无法运行 ./node exec!我得到错误:

./node: 1: ./node: Syntax error: "(" unexpected

我的问题是:

总价

标签: pluginsraspberry-pi3package-managerssnapcraft

解决方案


感谢 forum.snapcraft.io 我已经解决了这个问题......我在这里发帖也是为了帮助人们解决这些问题。此错误是由于快照未构建在您要运行它的实际目标架构上。确保您构建例如。armhf (raspberry pi3) 实际上在 armhf 架构设备上。

architectures: 
  - build-on: amd64 
    run-on: [amd64, armhf]

在这里,您告诉 snapcraft,在 amd64 上构建会生成可以在 amd64 和 armhf 上运行的二进制快照……这确实不是真的(因为在 amd64 上构建只会引入 amd64 二进制文件)。我会完全放弃该声明,并确保在 armhf 设备(或 build.snapcraft.io)上构建 armhf 版本。(学分奥格拉)

阅读 snapcraft.yaml 中关于架构的链接

https://forum.snapcraft.io/t/architectures/4972


推荐阅读