문제

웹 사이트 배포 프로세스의 일환으로 CSS를 조정할 수있는 간단한 Python 스크립트를 찾고 있습니다. (Python은 서버에서 지원되는 유일한 스크립팅 언어와 CSS Utils 이 프로젝트의 과잉입니다).

기본적으로 나는 원한다 jsmin.py CSS의 경우. 종속성이없는 단일 스크립트.

어떤 아이디어?

도움이 되었습니까?

해결책

이것은 내가 파이썬에 들어가는 좋은 일처럼 보였습니다. 이에 따라 첫 번째 파이썬 스크립트를 제시합니다.

import sys, re

with open( sys.argv[1] , 'r' ) as f:
    css = f.read()

# remove comments - this will break a lot of hacks :-P
css = re.sub( r'\s*/\*\s*\*/', "$$HACK1$$", css ) # preserve IE<6 comment hack
css = re.sub( r'/\*[\s\S]*?\*/', "", css )
css = css.replace( "$$HACK1$$", '/**/' ) # preserve IE<6 comment hack

# url() doesn't need quotes
css = re.sub( r'url\((["\'])([^)]*)\1\)', r'url(\2)', css )

# spaces may be safely collapsed as generated content will collapse them anyway
css = re.sub( r'\s+', ' ', css )

# shorten collapsable colors: #aabbcc to #abc
css = re.sub( r'#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3(\s|;)', r'#\1\2\3\4', css )

# fragment values can loose zeros
css = re.sub( r':\s*0(\.\d+([cm]m|e[mx]|in|p[ctx]))\s*;', r':\1;', css )

for rule in re.findall( r'([^{]+){([^}]*)}', css ):

    # we don't need spaces around operators
    selectors = [re.sub( r'(?<=[\[\(>+=])\s+|\s+(?=[=~^$*|>+\]\)])', r'', selector.strip() ) for selector in rule[0].split( ',' )]

    # order is important, but we still want to discard repetitions
    properties = {}
    porder = []
    for prop in re.findall( '(.*?):(.*?)(;|$)', rule[1] ):
        key = prop[0].strip().lower()
        if key not in porder: porder.append( key )
        properties[ key ] = prop[1].strip()

    # output rule if it contains any declarations
    if properties:
        print "%s{%s}" % ( ','.join( selectors ), ''.join(['%s:%s;' % (key, properties[key]) for key in porder])[:-1] ) 

나는 이것이 효과가 있다고 생각하고 최근 사파리, 오페라 및 파이어 폭스에서 잘 테스트합니다. 밑줄 & / ** / 해킹 이외의 CSS 해킹을 중단합니다! 많은 해킹이 진행중인 경우 미니 파이어를 사용하지 마십시오 (또는 별도의 파일에 넣으십시오).

내 파이썬에 대한 모든 팁은 감사했습니다. 그래도 부드럽게 해주세요. 처음입니다. :-)

다른 팁

Python에 사용할 수있는 Yui의 CSS 압축기 포트가 있습니다.

PYPI의 프로젝트 페이지는 다음과 같습니다.http://pypi.python.org/pypi/cssmin/0.1.1

누군가이 질문에 착륙하고 Django를 사용하는 경우이 문제에 대해 일반적으로 사용되는 패키지가 있습니다. 장고 압축기:

링크 및 인라인 JavaScript 또는 CSS를 단일 캐시 파일로 압축합니다.

  • JS/CSS는 템플릿에 속합니다

  • 유연성

  • 방해가되지 않습니다

  • 전체 테스트 스위트

나는 준비된 Python CSS 미니 퍼가를 모르지만 CSS Utils는 옵션이 있다고 말했습니다. 라이센스가 허용되는지 확인하고 확인한 후에는 소스 코드를 거쳐 자신을 조정하는 부분을 제거 할 수 있습니다. 그런 다음 이것을 단일 스크립트와 짜잔으로 고집하십시오! 당신은 간다.

헤드 스타트로서, .../trunk/src/cssutils/script.py의 csscombine 함수는 361 행 주위의 어딘가를 미치는 작업을 수행하는 것으로 보입니다 (수정 1499를 확인했습니다). "Minify"라는 부울 함수 인수에 주목하십시오.

멋진 온라인 도구가 있습니다 CSSMINIFIER 매우 간단하고 사용하기 쉬운 API도 있습니다. CSS 파일 컨텐츠를 해당 도구의 API에 게시하고 미니 프라이드 CSS를 반환하고 "Style.min.css"파일에 저장하는 작은 파이썬 스크립트를 만들었습니다. 자동 배포 스크립트에 잘 통합 될 수있는 작은 코드이기 때문에 좋아합니다.

import requests
f = open("style.css", "r")
css_text = f.read()
f.close()
r = requests.post("http://cssminifier.com/raw", data={"input":css_text})
css_minified = r.text
f2 = open("style.min.css", "w")
f2.write(css_minified)
f2.close()

에서 WebAssets 문서 문서 여러 압축기 및 컴파일러에 대한 링크를 찾을 수 있습니다. 내가 선택한 목록에서 pyscss, 또한 결과 CS를 최소화합니다.

CSS 압축기 만 필요하면 시도해 볼 수 있습니다. CSSCompressor:

Yui CSS 압축기의 거의 정확한 포트. 모든 원본 유닛 테스트를 통과합니다.

보다 일반적인 도구는입니다 CSS-HTML-PRETTIFY:

웹을위한 독립형 비스듬한 단일 파일 크로스 플랫폼 유니 코드 준비 Python3 Pythifier Beautifier.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top