我为网络编写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调用会更好,但是我不确定如何诚实,主要是我如何才能找回压缩数据以及如何处理(在哪里存储)。
答案 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