【问题标题】:Github Actions with gzip after build构建后使用 gzip 的 Github Actions
【发布时间】:2020-04-26 10:11:00
【问题描述】:

我一直在尝试在 github 操作中构建后找到一种方法来 gzip 我的构建文件。我的构建不会自动执行此操作,我不确定应该在何处或何时进行压缩。

我的操作有一个构建项目的有效运行命令,但随后压缩失败或根本不起作用,具体取决于我的运行方式。

这是我最近尝试的方式:

- name: Build
  run: |
    npm ci
    npm run build --prod --aot

- name: GZIP
  run: |
    npm install gzip-cli
    gzip ./dist/*.js -k -9

我确定这里的答案要么是“你不能那样做”要么是“你不能那样做”,但我不知道从这里去哪里。我的服务器本身不压缩文件,我不知道如何让 github 做到这一点。我需要所有js 文件才能拥有gz 文件。

我试过使用gzippergzip-cli,控制台通常会输出这个:

  npm install gzipper
  gzipper --exclude jpg,jpeg,png,svg ./dist
  shell: /bin/bash -e {0}
npm WARN karma-jasmine-html-reporter@1.5.1 requires a peer of jasmine-core@>=3.5 but none is installed. You must install peer dependencies yourself.

+ gzipper@3.4.2
updated 1 package and audited 19029 packages in 11.676s

33 packages are looking for funding
  run `npm fund` for details

found 2 high severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details
/home/runner/work/_temp/96763ca6-0048-4812-a8bb-72bf33d14fcc.sh: line 2: gzipper: command not found
##[error]Process completed with exit code 127.

看起来它安装得很好,但是它显示找不到命令(无论是 gzipper 还是 gzip-cli)。

如果我使用普通的旧 gzip,我不会收到任何错误。它运行,但实际上并没有压缩任何东西。难道是github在上传之前将文件临时存储在某个地方?

【问题讨论】:

  • 究竟什么是“不工作”?你是什​​么意思它失败取决于你如何运行它;您还尝试了哪些其他方式来运行该命令?您还确定gzip 命令在路径上吗?假设您在 linux 环境中执行此操作,您是否可以运行命令 command -v gzip 来查看您正在运行哪个 gzip 命令(如果有)?请包括所有这些作为您的问题的更新
  • @smac89 谢谢你的评论,我马上更新答案
  • 您应该尝试全局安装它。默认情况下,如果未指定 -g 标志,npm 将自动在本地 node_modules 下安装您的依赖项。具有可执行文件的依赖项将在node_modules/.bin 中提供其可执行文件,可以通过执行$(npm bin) 找到。
  • 您在工作流程中使用什么跑步者? (例如ubuntu-latestmacos-latest
  • @Edric 我在做runs-on: ubuntu-latest

标签: node.js github yaml github-actions


【解决方案1】:

使用您当前用于安装gzip-cligzipper 的方法,它们将被保存到当前项目的node_modules 文件夹中。他们的可执行文件也将安装在node_modules/.bin(可以通过运行npm bin 找到)。但是,除非您全局安装它们,否则您的项目依赖可执行文件通常在 PATH 环境变量中不可用。

来自docs for the bin field for a dependency's package.json

安装时,npm 将该文件符号链接到 prefix/bin 用于全局安装,或 ./node_modules/.bin/ 用于本地安装。

因此,您应该:

  • 使用-g 标志全局安装依赖项。如果npm的.bin目录包含在PATH中,则可以轻松执行命令。

  • 运行带有$(npm bin)/的命令:

    $(npm bin)/gzip ./dist/*.js -k -9
    
  • 或者添加一个 script 来做同样的事情。通常 npm 脚本会有dependency executables available to them in the PATH environment variable:

    {
      "scripts: {
        "gzip-files": "gzip ./dist/*.js -k -9"
      },
      "dependencies": {
        "gzip-cli": "/* version range */"
      }
    }
    

【讨论】:

  • 谢谢你!我正在测试另外两个项目符号,但是对于第一个项目符号,似乎 github 不允许我全局安装。我收到消息Run npm install gzip-cli -g npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules。所以接下来我会尝试其他两个!
  • 您的第二个选项效果很好!太感谢了!一个简单的问题:我是否需要每次都运行安装?我不确定这些盒子是如何设置的。
  • 您可以将gzip-cli 添加到项目的依赖项中,如果您的工作流程包含安装依赖项的步骤,它将被安装。
  • 嗯,我以为我有,但我将不得不仔细检查。感谢您清除这一切!
猜你喜欢
  • 2021-04-29
  • 2021-08-20
  • 2020-11-26
  • 2021-07-11
  • 2020-02-09
  • 1970-01-01
  • 2020-10-30
  • 2021-06-07
  • 2022-08-16
相关资源
最近更新 更多