2009-08-31 6 views
9

업로드시 처리 스크립트를 통해 특정 파일 형식을 자동으로 실행하는 좋은 방법을 알고 계신 분이 계십니까? 나는 자동으로 CSS와 자바 스크립트를 서버에 업로드 할 때 자동으로 축소하려고하는데, 서버에 축소 된 것을 유지하면서 로컬 측에 사람이 읽을 수있는 멋진 버전을 유지한다. 저는 현재 Windows에서 WinSCP를 사용하고 있습니다. Windows에서는 어느 정도 스크립트가 가능하지만 스크립트로는 충분하지 않을 수 있습니다. 아마 어떤 종류의 자갈이 쳐진 솔루션이 필요할 것입니다. 덕트 테이프가있는 것을 제안하는 것을 두려워하지 마십시오. 그러나 공유 호스트를 사용하고 서버에 정크를 설치할 수 없기 때문에 내 로컬 컴퓨터에서 축소를 수행하고 squished 파일을 업로드해야합니다.업로드시 CSS 및 자바 스크립트를 자동으로 축소

감사합니다.

+3

Cygwin + scp + shell 스크립트. –

+0

그건 그렇고 대답이 잘못되어 투표하는 것은 당신이해야 할 일입니다. 당신이 포스터를 싫어하기 때문에 질문을 투표하는 것은 악의적 인 것이 아닙니다. –

+0

jon의 답변에 대한 귀하의 의견의 색조와 CAPS 사용 사실이 귀하의 질문에 대한 downvoting보다 더 악의적이라고 생각합니다. – redsquare

답변

6

나는 여기에 내가 내 사이트에 대한 사용하고 신속하고 더러운 메이크이야,이 특정 문제를 해결하기 위해 메이크 파일을 만드는 것이 좋습니다

make && make install 

먼저 모든 개발 파일을 하나의 파일로 결합한 다음 연결된 파일을 압축하여 공용 디렉토리에 복사합니다. 나는 압축을 위해 YUICompressor을 사용하고 있는데, 꽤 잘 작동한다.

+0

핫도그. Cygwin을 사용하면 그만한 가치가있을 것입니다. –

+0

내가 끝낸 것은 (Windows에서 시작한 이래로) PSEventing 스냅인을 사용하여 디렉터리에 변경 내용을 감시하는 Powershell 스크립트를 작성한 다음 파일 확장명에 따라 적절한 확장기를 통해 실행합니다. –

5

공유 호스팅을 사용 중이므로 YUICompressor을 사용하고 css/js 파일을 업로드하기 전에 실행 해 보시기 바랍니다. 원본 파일을 잃어 버리지 않도록하십시오. 미래의 변화를 초래하는 고통 일 수 있습니다.

주기적으로 css/js 파일을 다시 작성하고 minify-process를 통해 전달하는 스크립트를 서버에 배치하고 업로드를 수행 한 후 수동으로이 스크립트를 호출 할 수도 있습니다.

+0

질문 읽기. 나는 업로드 할 때 그것을 할 수있는 방법을 물었다. 사용할 것이 무엇인지 알고 있습니다. 자동화하는 좋은 방법이 있는지 알아야합니다. –

+0

질문을 읽었습니다. 그리고 업로드 할 때 자동으로 수행 할 수있는 옵션이 없다고 생각하기 때문에 최선의 대안으로 생각한 것을 제공했습니다. – Sampson

+0

글쎄요, 누군가 다른 사람이 알 것입니다. 그래서 제가 처음에 물었습니다. –

5

글쎄, CSS를 축소하는 것은 단지 몇 가지 정규 표현식입니다.

// (PHP) but should be easily portable to any language 
function compressCSS($css) { 
    return 
     preg_replace(
      array('@\s\[email protected]','@(\w+:)\s*([\w\s,#]+;?)@'), 
      array(' ','$1$2'), 
      str_replace(
       array("\r","\n","\t",' {','} ',';}'), 
       array('','','','{','}','}'), 
       preg_replace('@/\*[^*]*\*+([^/][^*]*\*+)*/@', '', $css) 
      ) 
     ) 
    ; 
} 

그리고 딘 에드워즈의 자바 스크립트 패커 PHP, Perl, .NET and WSH에 포팅되었습니다, 그래서 당신은 이러한 기술 중 하나를 사용하는 경우, 당신은 실제로 자신의 서버에서 실행중인있을 수 있습니다. ... 결과를 캐시하는 것을 잊지 마십시오!

+0

명백하게 OP는 그에게 업로드시 자동적으로 그것을하는 방법을 말하지 않기 때문에 우리에게 downvoting 다.당신이 유효한 해결책을 제안했다고 생각하기 때문에, 나는 그의 downvote를 upvote로 상쇄 할 것입니다. – Sampson

+3

내 질문에 대답하지 않는 답변을 어떻게 감히 downvote! –

+11

@Jarett 때로는 우리의 질문에 대한 대안이 가장 잘 나타납니다. – Sampson

2

나는 Minify을 좋아한다. 그것은 압축 및 HTML, 자바 스크립트 및 CSS를 즉시 트리밍을 지원합니다.

매우 유연하며 기존 앱에 통합 될 수 있습니다.

일부는 더 고급 기능은 여러 개의 자바 스크립트 파일을 하나에 결합되어 있습니다, CSS와 동일합니다. 결합 할 파일을 여러 가지 방법으로 정의 할 수 있으므로 테스트 목적으로 유용합니다. 이렇게하면 매번 설정을 수정할 필요가 없습니다. 당신이 가진 모든 입력 그런

PUBDIR=../../static/js/ 
OUTDIR=./build/ 
COMPRESSOR=../yui/build/yuicompressor-2.4.2.jar 
ARGS= 
VPATH=${OUTDIR} 
INST_TARGETS=${OUTDIR}jgblue.js 

jgblue.js: combined.js 
    java -jar ${COMPRESSOR} ${ARGS} ${OUTDIR}$< -o ${OUTDIR}[email protected] 

combined.js: main.js listview.js tabs.js 
    cat $^ > ${OUTDIR}[email protected] 

.PHONY: install 

install: 
    cp ${INST_TARGETS} ${PUBDIR} 

입니다 :

+0

아마도 좋을 것입니다. 그것은 내가 생각하고 있던 해결책보다 더 어리 석다. –

+0

정말 빠릅니다. 나는 더 많은 정보를 추가했다. – Dykam

1

라이브 서버에 업로드하기 전에 개발 컴퓨터에서 (일부 자동화 된 방법으로) 압축하여 테스트 해보는 것이 좋습니다. 배포 프로세스의 마지막 단계에서 JavaScript를 근본적으로 변경하면 오류가 발생할 수 있습니다.

+0

그것이 업로드시 자동으로 축소되도록하려는 이유 중 하나입니다. 그래서 나는 실제 제작 파일이 무엇인지 항상 테스트하고 있습니다. –

1

멋진 솔루션은 whice가 js를 제공하고 css가 자동으로 꿈과 같이합니다.

확인 : http://code.google.com/p/minify/

는 하나의 다운로드

    • 결합하고 축소하고 여러 CSS 나 자바 스크립트 파일 특징은 CSS를 작게를하는 더글러스 크록 포드의에서 JSMin 라이브러리 및 사용자 정의 클래스의 확장 포트를 사용 및 HTML
    • 불필요한 작업을 피하기 위해 서버 측 (files/apc/memcache) 캐시
    • 는 HTTP 304 브라우저가
    • 대부분의 모듈은 필요에 따라 게으른로드 최신 캐시 사본을 (304 개 응답이 최소한의 코드를 사용)
    • 자동으로 상대 URI를 재 작성이 (수정되지 않음) 응답 6,
    • 응답합니다 유효한 CSS 파일을 결합하여 유효한 위치를 지정합니다.
    • 캐싱을 사용하면 Minify는 보통 서버에서 초당 수백 개의 요청을 처리 할 수 ​​있습니다.
    • Content-Encoding : gzip (요청 헤더 기반). 캐싱을 사용하면 gzip으로 압축 된 파일을 Apache의 mod_deflate 옵션보다 빨리 처리 할 수 ​​있습니다! 대부분의 구성 요소에 대한
    • 시험의 경우 제 3 자 사용해 minifier HTTP 인코딩 및 enter code here
2

캐시 제어 난 그냥 파이썬이 minfier 스크립트를 작성하기위한

  • 별도의 유틸리티 클래스의
  • 쉽게 통합. Bills 솔루션과 마찬가지로 YUI 압축기를 사용하지만 무방비 환경에서도 작동합니다. raw (unminifie) 파일은/some/path/src /에 있고, 축소 된 버전은/some/path /에 있어야한다고 가정합니다. 또한 yuicompressor jar 파일이 현재 폴더에 있다고 가정합니다 :이 (JS 및 CSS) 모두 더 가벼운 솔루션입니다 그래서 당신은 "즉시 축소하세요"수

    import os, glob 
    from subprocess import Popen,PIPE 
    
    def RunCommand(cmd, show_output ): 
        p = Popen(cmd, shell=True,stdout=PIPE,stderr=PIPE) 
        for line in p.stdout: 
         if show_output: 
          print line 
    
    
        outerr = "\n".join(p.stderr.readlines()) 
    
        if len(outerr) > 0: 
         print "ERROR: " + outerr 
         sys.exit() 
    
        code = p.wait()   
        if (code > 0): 
         print ("ERROR CODE: %i" % code) 
         sys.exit() 
    
    
    
    compresser = "yuicompressor-2.4.2.jar" 
    dirs = [ "../wwwroot/css/", "../wwwroot/JavaScript/"] 
    
    extensions = ["*.js", "*.css" ] 
    
    for dir in dirs: 
        src = dir + "/src/" 
        for ext in extensions:  
         for path in glob.glob(os.path.join(src, ext)): 
          file = os.path.basename(path) 
          src_file = os.path.normpath(src + "/" + file) 
          dest_file = os.path.normpath(dir + "/" + file) 
          if not os.path.isfile(dest_file) or os.path.getmtime(src_file) > os.path.getmtime(dest_file): 
           print "minifying %s..." % (dest_file) 
           command = "java -jar %s %s -o %s" % (compresser, src_file, dest_file) 
           RunCommand(command, True) 
    
  • 0

    . 어떤 언어로든 쉽게 포팅 할 수 있어야합니다 (현재 PHP에 있습니다). PHP 뚱뚱한 자유로운기구의 분절 그리고 불가결 한 부분이다. 이 링크를 따라하고 내 코드를 살펴보십시오. 그것은 단지 하나의 기능입니다. 파일 결합, base-X 인코딩, 변수 단축, 심지어는 gzip 인코딩 (비록 쉽게 추가 될 수 있음)과 같은 종소리와 휘파람을 찾지 마십시오.

    Fat-Free Minify

    관련 문제