APKBUILD 示例:JavaScript
![]() 备用消息。 |
打包基于 JavaScript 的应用程序很容易,只要没有可能在 musl 上崩溃的沉重依赖项。目前不支持基于 Electron 的 GUI 应用程序,但是 Linux 上提供了各种命令行应用程序,可以打包供 Alpine 用户使用。
因为 Node.js 应用程序实际上有数百个依赖项,所以只保留所有内部依赖项,除了那些需要特殊补丁的依赖项,这样更有意义。我们现在只介绍简单的软件包。
再次说明,只打包应用程序,而不是 Node.js 库,但仅当 Node.js 包需要在 musl 上进行修补时才打包。
要求
- Node.js -- nodejs
- npm -- nodejs-npm
- 一个开源项目,其根目录或 app 文件夹中包含 package.json 文件
应该获取哪个压缩包?
你仍然需要获取压缩文件(.zip、.tar.gz 等)。不要使用 npm install $pkgname@$pkgver
。如果压缩包不存在,那么你可以在 snapshot() 中使用该命令。
全局变量
depends="nodejs-npm"
构建
在这一步中,我们告诉 npm
获取依赖项,并在存在二进制依赖项时构建它们。这些依赖项将被放置在与 package.json 相同的目录中的名为 node_modules 的文件夹中。你可能需要在根级别和 app 文件夹(如果有)或任何你看到没有 node_modules 的 package.json 文件的地方重复执行此操作。
build() { cd "$builddir" npm install }
打包
这是一个没有文档的简单示例。你需要打包 bin 文件夹、package*.json 文件和 lib 文件夹。可能还有其他文件需要打包。所有应用程序都应该放在 "$pkgdir"/usr/lib/node_modules/$pkgname 中,以便它们对其他 nodejs 程序可见,或者为了跟踪 npm 依赖项以供未来工具进行 CVE 检查。
你还需要为某些程序放置符号链接,但不是全部,因为 npm 应用程序之间为了兼容性和本机应用程序之间存在一些重叠。只符号链接主要的或主要的程序,而不是依赖项。
package() { cd "$builddir" install -d "$pkgdir"/usr/share/doc/$pkgname "$pkgdir"/usr/lib/node_modules/$pkgname cp -a bin lib node_modules package*.json "$pkgdir"/usr/lib/node_modules/$pkgname ln -s /usr/lib/node_modules/$pkgname/bin/$pkgname "$pkgdir"/usr/bin }
测试
check() { cd "$builddir" npm test }
许可
由于你将依赖项和应用程序打包在一个包中,你应该在许可证字段中列出这些依赖项的所有许可证。使用 grep
和 find
来查找它们。
安全更新
如果发生 CVE 通知并且需要更新以修复 npm
依赖项的 CVE,你需要重建软件包并增加 pkgrel。