首页 > 解决方案 > 构建后使用 gzip 的 Github Actions

问题描述

在 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文件。

我试过使用gzipperas well ,gzip-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)。

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

标签: node.jsgithubyamlgithub-actions

解决方案


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

依赖项的字段的文档中binpackage.json

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

因此,您应该:

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

  • 运行$(npm bin)/附加到命令的命令:

    $(npm bin)/gzip ./dist/*.js -k -9
    
  • 或者添加一个执行相同操作的脚本。通常,npm 脚本将在环境变量中具有可供它们使用的依赖可执行文件PATH

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

推荐阅读