如何在Gitlab CI中缩小Javascript代码?

时间:2018-11-15 10:21:35

标签: javascript gitlab webhooks minify gitlab-ci

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

我的目标似乎很简单:使用Gitlab CI来减少某些事件的代码并输出这些文件,这对我来说很方便。

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

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

我的最好的镜头似乎不是 Google Closure Compiler ,可以与它的API结合使用。如果我理解正确,我可以使用 Gitlab的Webhooks 进行该API调用(不确定我将如何以这种方式传递数据,但是我将看看能做什么)。但是,然后,我如何读取响应(Gitlab Webhooks似乎不适合这样做)? 也许直接在Gitlab CI中进行这些API调用会更好,但是我不确定如何诚实,主要是我如何才能找回压缩数据以及如何处理(在哪里存储)。

3 个答案:

答案 0 :(得分:3)

如果有人正在通过在管道中使用uglify.js解决此问题。 您可以在管道中使用以下代码,并获取缩小的代码

minify-js:
  image: node:latest
  stage: process
  script:
    - npm install uglify-js -g
    - mkdir -p ./output
    - uglifyjs ./public/js/xxx.js -o output/xxx.min.js -c -m
  artifacts:
    paths:
      - output

deploy-dev:
  stage: deploy
  script:
    - cp output/xxx.min.js public/js/xxx.min.js

以上yaml在minify_js任务中将xxx.js转换为xxx.min.js

答案 1 :(得分:1)

我的回答来得有点晚,但可能会对其他人有所帮助。 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将整个项目src/static/js/发送到生产服务器之前,该管道缩小并替换src中包含的所有js文件。

脚本之前

由于默认情况下gitlab运行程序没有 java ,因此我们安装了apt-get install -y -qq default-jdk。然后,我们只需要wget yuicompressor的jar

希望有帮助

答案 2 :(得分:0)

使用@hybrid 方法,我将其调整为与 Google Closure Compiler
仅在源文件已更改(更改)时才会运行

minify-js:
  image: node:latest
  stage: process
  only:
    changes:
      - "public/js/script.js"
  script:
    - npm i -g google-closure-compiler
    - google-closure-compiler --js public/js/script.js --js_output_file tmp/script.min.js --language_in=ECMASCRIPT6_STRICT
  artifacts:
    paths:
      - tmp/script.min.js
    expire_in: 1 day

deploy-dev:
  stage: deploy
script:
    # Copy compiled script file if exist
    - test -f tmp/script.min.js && cp tmp/script.min.js public/js/script.min.js