2012-05-15 1 views
4

프론트 엔드 구성 요소에 약간의 CoffeeScript를 사용하는 Python Django 패키지를 만들고 있습니다.파이썬 패키지의 distutils 설치 단계에서 CoffeeScript를 어떻게 컴파일 할 수 있습니까?

바로 지금, 나는 커피 스크립트 편집을 담당하는 다소 뇌사 상태의 외부 스크립트를 가지고 있습니다. src/coffee/디렉토리의 모든 * .coffee 파일에 대해 coffee 컴파일 명령을 실행하고 src/static/js에 출력을 저장합니다. 이는 python ./setup.py build_ext --inplace이 C 소스의 빌드 파일을 개발 소스 트리에 저장하는 것과 유사합니다.

지금은 효과가 있지만 상당히 편하다. 즉, 플랫 디렉토리 구조를 강제로 만들고 src/static ("정적"이 암시하는 것과 반대 임)의 파일을 수정한다.

을 : -

나는 것들에 대해 최대한 파이썬되고 싶어요, 그래서 하위 명령 "build_ext"는 setup.py의 하위 명령으로 coffee를 실행하는 distutils.ccompiler.CCompiler 수정으로 보았다 나는이 같은 일을 할 수있는 능력을 구상했다

% python ./setup.py build_coffee 
% python ./setup.py build_coffee --inplace 
% python ./setup.py build_ext --inplace # implying 'build_coffee --inplace' 

...하지만 distutils의 컴파일러 API가이 경우에 아날로그가없는 C 컴파일 뉘앙스에 너무 집중되어 있음을 발견했습니다. 전처리, 링크 등. Cython의 코드 (특히 Cython의 CCompiler 서브 클래스에서 .cx 소스로 .pyx 파일을 전처리하는)를 보았지만 이와 유사하게 특수하게 보였으 나이 경우에는 적절하지 않습니다.

누군가 distutils setup.py 스크립트로 CoffeeScript를 컴파일하는 좋은 해결책이 있습니까? 아니면, 좋은 대안을 제시하지 않으셨습니까?

+1

요구 사항에 맞는지 확실하지 않은 https://github.com/jezdez/django_compressor를 확인하십시오. –

+0

웹 응용 프로그램과 함께이 패키지를 개발중인 기본 프로젝트에서 실제로 해당 패키지를 사용하고 있습니다. 그것을 사용합니다. 훌륭한 패키지이지만 웹 컨텍스트에서 컴파일 된/압축 된 자산을 자동으로 배포하는 데 중점을 둡니다. 일반적인 전제 조건으로 사용할 수는 없습니다. Cython이 distutils와 함께 작동하는 방식에 대해 더 많은 것을 찾고 있습니다 (예 : 설치되어있는 경우 필요에 따라 사전 처리 및 컴파일). 잠재적 인 사용자는 CoffeeScript를 같은 방법으로 설치하지 않을 수 있으며 webapp 배포 방법은 django-compressor와 잘 맞지 않을 수 있습니다. – fish2000

+0

장고의 collectstatic 명령 바인딩에 무슨 문제가 있습니까? –

답변

1

사용자 정의 manage.py 명령으로이를 롤백 할 수 있습니다. See the official Django documentation here 이렇게하면 서버를 실행할 때마다 스크립트가 실행되어 항상 js가 깨끗하게 빌드됩니다.

+0

좋은 전화 - 당신이 말했을 때, 그것은 여러 가지면에서 이런 유형의 물건을위한 더 건강한 곳입니다. 고마워요. – fish2000

1

coffescript를 javascript로 컴파일하는 pre-commit hook *을 가질 수 있습니다.

그래서 coffescript에서 변경 사항을 적용 할 때마다 자바 스크립트 버전이 업데이트됩니다.

* pre commit hook : 사용 방법은 사용하는 VCS에 따라 다르며 정상적인 VCS를 사용하는 사용자에 따라 다릅니다.

+0

사실 나는 pre-commit 후크를 좋아한다 - 나는 주로 git을 사용한다; 이 점에서, 그것은 열매가 아니며 사실이 시간에 미리 커밋 된 후크를 가진 내 치즈 컴파일 일괄 스크립트를 호출하고 있습니다. 그게 내 발달 욕구와 어쩌면 환자와 GitHub에서 그것을 복제하는 것에 관심이있을 지 모르지만, 선택 시스템 인 VCS를 CheeseShop 소스 tarball (또는 계란 , 신 금지). 이것이 내가 distutils에 친숙한 해결책을 찾고있는 이유입니다. – fish2000

+1

좋아, 네가 나를 격려하고 있기 때문에, 나는 너에게 하하를 납득 시키려고 재빨리 시도 할 것이다 ....빌드 시스템이 VCS에 의존하지 않도록하여 사용자가 VCS없이 모듈을 해킹하고 빌드 할 수있게합니다. git을 사용하고 있기 때문에 사용자가 git fork를 수행하지 않고 모듈을 해킹하여 커밋 - 후크 기능을 사용하는 것이 실제로 의미가 있습니까? 나쁜 습관을 북돋는 것이 아닐까요? 또한 gif 포크와 후크를 사용할만큼 유능해야한다는 것을 의미하는 수정을 사용하여 모듈을 빌드하기 위해 coffescript 컴파일러를 설치해야합니다. 그냥 빨리 시도하고, 선택은 당신 것입니다. – jpic

+0

하하하 - 관행에 관한 것 : 당신은 그들을 연습해야합니다. 일반적으로 모범 사례는 프로그래머보다 큰 생태계에 도움이됩니다. 예를 들어 Distutils는 최종 사용자의 이익을위한 것이며, 우리 모두는 그것을 증오하는 것을 좋아합니다. 그러나 하루가 끝날 무렵에 뭔가를 설치하는 기름칠하게 Pythonic 한 방법은'pip install something'을 사용하는 것입니다 - 최종 사용자로서 나는 누군가를 설치하려고 할 때 포크로 덤비는 것을 선호합니다. 수수께끼의 코드로 가득 차있다. 이 수준의 사용자는 아마도 유능한 사람 일 수 있지만, 자신의 능력을 테스트하면 내 물건을 사용하지 않을 것입니다. – fish2000