Один из вариантов заключается в использовании javascript-версии Less и, следовательно, в преобразовании менее-в-CSS в браузере. Просто загрузите менее отформатированный файл (подробности см. В разделе http://lesscss.org/).
С другой стороны, я делаю преобразование (первый с меньшими затратами, теперь я использую дерзость) в сценарии развертывания, который делает ряд вещей
- проверяет, что мой контроль исходный код не выдающиеся файлы не проверил (неподтвержденными изменения)
- присоединяет и минимизирует мой .js код (и запускает jslint над ним) в один файл
- создает другое содержимое (включая штампование версии управления исходным кодом как номер версии в определенные файлы ключей и в качестве параметра на некоторые файлы, чтобы избежать проблем с кешированием), поэтому моя главная страница использует сценарии с URL-адресами, такими как «allmysour ce.js? v = 585" .. файл может быть статичным, но добавленный PARAMS кэш силы утративших силы
- вызовов AppCfg выполнить загрузку и проверяют код возврата
- делает некоторые вызовы к реальному сайту с Wget проверить предварительно сгенерированные файлы фактически возвращаются, проверяя, что они штамп с ожидаемой версией
- применяет другое управление исходного кода тег, чтобы сказать, что предполагаемая версия была успешно развернута
Моего сценарий принимает также " -preview ", и в этом случае он фактически не выполняет загрузку, а сообщает v ersion для комментариев, которые были изменены с момента предыдущего развертывания.
[email protected] $ ./deploy -preview
Deployment preview...
Would deploy v596 to the production site (currently v593, previously v587)
594 Fix blah blah blah for X Y Z
595 New feature nah nah nah
596 Update help pages
Это очень удобно, как напоминание о том, что мне нужно поставить в такие вещи, как список изменений
Я планирую также расширить его так, что я могу, как часть моего контроля исходного кода, добавить любой код, который нужно запускать один раз только при развертывании (например, изменения схемы базы данных) и знать, что он будет автоматически запускаться при следующем развертывании новой версии.
Суть сценария ниже, как люди спрашивали ... он не показывает мой «чек-код, генерирует, объединяет и минимизирует», поскольку это другой скрипт ...Я понимаю, что первоначальный вопрос с просьбой об этом шаге, конечно :), но вы можете увидеть, где вы бы добавить вызов для создания CSS и т.д.
#!/bin/sh
function abort() {
echo
echo "ERROR: $1"
echo "$2"
exit 99
}
function warn() {
echo
echo "WARNING: $1"
echo "$2"
}
# Overrides the Gentoo eselect mechanism to force the python version the GAE scripts expect
export EPYTHON=python2.5
# names of tags used to label bzr versions
CURR_DTAG=deployed
PREV_DTAG=prevDeployed
# command line options
PREVIEW=0
IGNORE_BZR=0
# These next few vars are set to values to identify my site, insert your own values here...
APPID=your_gae_appid_here
ADMIN_EMAIL=your_admin_email_address_here
SRCDIR=directory_to_deploy
CHECK_URL=url_of_page_to_retrive_that_does_upload_initialisation
for ARG; do
if [[ "$ARG" == "-preview" ]]; then
echo "Deployment preview..."
PREVIEW=1
fi
if [[ "$ARG" == "-force" ]]; then
echo "Ignoring the fact some files may not be committed to bzr..."
IGNORE_BZR=1
fi
done
echo
# check bzr for uncommited changed
BSTATUS=`bzr status`
if [[ "$BSTATUS" != "" ]]; then
if [[ "$IGNORE_BZR" == "0" ]]; then
abort "There are uncommited changes - commit/revert/ignore all files before deploying" "$BSTATUS"
else
warn "There are uncommited changes" "$BSTATUS"
fi
fi
# get version of numbers of last deployed etc
currver=`bzr log -l1 --line | sed -e 's/: .*//'`
lastver=`bzr log -rtag:${CURR_DTAG} --line | sed -e 's/: .*//'`
prevver=`bzr log -rtag:${PREV_DTAG} --line | sed -e 's/: .*//'`
lastlog=`bzr log -l 1 --line gae/changelog | sed -e 's/: .*//'`
RELEASE_NOTES=`bzr log --short --forward -r $lastver..$currver \
| perl -ne '$ver = $1 if /^ {0,4}(\d+) /; print " $ver $_" if ($ver and /^ {5,}\w/)' \
| grep -v "^ *$lastver "`
LOG_NOTES=`bzr log --short --forward -r $lastlog..$currver \
| perl -ne '$ver = $1 if /^ {0,4}(\d+) /; print " $ver $_" if ($ver and /^ {5,}\w/)' \
| grep -v "^ *$lastlog "`
# Crude but old habit - BUGBUGBUG is a marker in the code for things to be fixed before deployment
echo "Checking code for outstanding issues before deployment"
BUGSTATUS=`grep BUGBUGBUG js/*js`
if [[ "$BUGSTATUS" != "" ]]; then
if [[ "$IGNORE_BZR" == "0" ]]; then
abort "There are outstanding BUGBUGBUGs - fix them before deploying" "$BUGSTATUS"
else
warn "There are outstanding BUGBUGBUGs" "$BUGSTATUS"
fi
fi
echo
echo "Deploy v$currver to the production site (currently v$lastver, previously v$prevver)"
echo "$RELEASE_NOTES"
echo
if [[ "$currver" -gt "$lastlog" && "$lastver" -ne "$lastlog" ]]; then
echo "Changes since the changelog was last updated"
echo "$LOG_NOTES"
echo
fi
if [[ "$IGNORE_BZR" == "0" && $lastver -ge $currver ]]; then
abort "There don't appear to be any changes to deploy..."
fi
if [[ "$PREVIEW" == "1" ]]; then
exit 0
fi
$EPYTHON -c "import ssl" \
|| abort "$EPYTHON can't find ssl module for $EPYTHON - download it from pypi and install with the inbuilt setup.py"
# REMOVED - call to my script that calls jslint, generates files and compresses JS etc
# || abort "Generation of code failed"
/opt/google_appengine/appcfg.py --email=$ADMIN_EMAIL -v -A $APPID update $SRCDIR \
|| abort "Appcfg failed - upload presumably incomplete"
# move the tags to show we deployed properly
bzr tag -r $lastver --force ${PREV_DTAG}
bzr tag -r $currver --force ${CURR_DTAG}
echo
echo "Production site updated from v$lastver to v$currver (in turn from v$prevver)"
echo
echo "Now visiting $CHECK_URL to upload the source to the database"
# new version doesn't seem to always be there (may be caching by the webserver etc) to be uploaded into the database.. try again just in case
for cb in $RANDOM $RANDOM $RANDOM $RANDOM ; do
prodver=`wget $CHECK_URL?_cb=$cb -q -O - | perl -ne 'print $1 if /^\s*Rev #(\d+)\s*$/'`
if [[ "$currver" == "$prodver" ]]; then
echo "OK: New version $prodver successfully deployed"
exit 0
fi
echo "Retrying the upload of source to the database"
sleep 5
done
abort "The new source doesn't seem to be loading into the database" "Try 'wget $CHECK_URL?_cb=$RANDOM -q -O -'"
Это не особенно большой или умный, но он автоматизирует работу загрузки
Я действительно не думаю, что есть более простой способ. Я использую аналогичный метод, но для js с компилятором google. – fredrik 2010-12-07 08:57:47
Вы также можете посмотреть http://sass-lang.com/, это будет жить вживую, пока вы развиваетесь. Таким образом, у вас есть уже компактный css, который вы можете загрузить. – fredrik 2010-12-07 09:00:19