首页 > 解决方案 > 如何在 Gitlab CI 中缩小 Javascript 代码?

问题描述

我为网络编写 Javascript 代码,我通常在上传之前将其缩小。我使用专用工具(如UglifyJS)在本地执行此操作,但我想使用Gitlab 持续集成稍微自动化该过程(因为我在这个项目中使用 Gitlab)。

我的目标似乎很简单:使用 Gitlab CI 来缩小某些事件的代码,并以一种方便的方式输出这些文件,以便我获取它们。

但是,我还没有找到任何东西(教程或其他)来做到这一点。

我对 Gitlab CI 的经验很少,所以我真的不知道从哪里开始,但我尝试将其分解为更小的问题: - 我找不到可以使用 Gitlab CI 运行的压缩/缩小的简单脚本,它主要是更大的实用程序(YUI Compressor、Google Closure Compiler)。- 如果我找到压缩文件的方法,我可以从 CI 将它们推送到我的存储库吗?如果是的话,我想知道这是否真的是一个好习惯,因为这会版本化没有用的缩小文件。

对不太复杂的事情的最佳尝试似乎是可以与其 API 一起使用的Google Closure Compiler 。如果我理解正确,我可以使用Gitlab 的 Webhooks进行 API 调用(不确定我将如何以这种方式传递数据,但我会看看我能做什么)。但是,我如何阅读响应(Gitlab Webhooks 似乎不适合)?也许直接在 Gitlab CI 中进行这些 API 调用会更好,但我不确定如何诚实,主要是如何获取压缩数据以及我可以用它做什么(在哪里存储它)。

标签: javascriptgitlabwebhooksminifygitlab-ci

解决方案


我的回答来得有点晚,但它可能对其他人有所帮助。IMO,最简单的方法是使用专用工具,例如yuicompressor(也适用于 CSS)。这是一个示例gitlab-ci

before_script:
  - apt-get update && apt-get install -y -qq sshpass
  - apt-get install -y -qq default-jdk
  - mkdir yuicompressor
  - wget -P yuicompressor/ https://github.com/yui/yuicompressor/releases/download/v2.4.8/yuicompressor-2.4.8.jar

deploy_production:
  stage: deploy
  environment: Production
  only:
    - master
  script: 
    - java -jar yuicompressor/yuicompressor-2.4.8.jar -o '.js$:.js' src/static/js/*.js
    - export SSHPASS=$SSH_PASS
    - sshpass -e scp -o stricthostkeychecking=no -r src/* user@some_domain.net:~/www/

解释

此管道在使用 sshpass将整个项目发送到生产服务器之前缩小并替换其中包含的所有 js 文件。src/static/js/src

脚本之前

由于 gitlab 运行器默认没有java,所以我们安装它apt-get install -y -qq default-jdk。然后我们只需要wgetyuicompressor 的 jar

希望能帮助到你


推荐阅读