파이썬 등 모바일 TypeScript로 쓴 프로그램의 마법'jsii'를 소개합니다.
14058 단어 TypeScriptPython
TypeScript로 작성된 프로그램은 아래 Python 프로그램에서 실행된 예입니다.
이 라이브러리는 jsii라는 라이브러리를 사용하여 TypeScript 프로그램을 Python 실행 가능한 라이브러리로 변환합니다.공식 문서에 the magic happens라고 적혀 있어요.는 마법 같은 기술이다.
jsii는 Python 이외에도 자바 등의 언어로 사용할 수 있지만, 본고에서는 Python으로 TypeScript로 쓴 프로그램을 실행합니다.
우리 실제로 한번 해 봅시다.
본문의 운행 환경
jsii로 해봐요.
jsii는 대체로 다음과 같은 절차에 따라 사용할 수 있다.
TypeScript 프로그램에 대한 설명
예를 들어, TypeScript의 적절한 FizzBuzz 프로그램을
lib/index.ts
에 설명합니다.lib/index.ts
export class MyClass {
fizzBuzz(arg: number): string {
if (arg % (3 * 5) === 0) {
return 'FizzBuzz';
} else if (arg % 3 === 0) {
return 'Fizz';
} else if (arg % 5 === 0) {
return 'Buzz';
}
return arg.toString();
}
}
TypeScript의 정상적인 실행을 통해 동작을 확인하려면 $ npx ts-node lib/index.ts
등 원하는 방법으로 수행합니다.package.json 설명
jsii는 구축할 때
package.json
정보를 사용하고 각 언어의 라이브러리에 로그인하는 메타정보를 사용합니다.따라서 어느 정도package.json
가'좋다'고 쓰지 않으면 jsii를 움직일 수 없다.다음은 설정 예입니다.
package.json
{
"name": "jsii-example",
"version": "1.0.0",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"author": "your_name",
"repository": {
"url": "https://example.com",
"type": "Git"
},
"license": "MIT",
"jsii": {
"outdir": "dist",
"targets": {
"python": {
"distName": "your_name.jsii_example",
"module": "your_name.jsii_example"
}
}
},
"devDependencies": {
"jsii": "^0.20.6",
"jsii-pacmak": "^0.20.6"
}
}
위에서 말한 바와 같이repository
와author
등 평소에 생략하기 쉬운 부분은 jsii를 사용할 때 필수적이다.또한 main
및 types
은 lib/index.ts
과 같은 디렉토리에 지정해야 합니다.또한 jsii의 특정한 설정으로
jsii
이 곳에서 각 언어의 패키지 정보를 기술한다.이번에 Python의 소프트웨어 패키지를 구축하기 위해 targets
에서 python
모듈 이름의 정보를 기술하였다.jsii에서 구축
설치
jsii
구축에 필요한 패키지입니다.$ npm install --save-dev jsii jsii-pacmak
$ echo "jsii
wheel
publication" > requirements.txt
$ pip install --require requirements.txt
상기 설치를 마친 후 jsii
명령으로 구축하고 jsii-pacmak
명령으로 포장한다.$ npx jsii
$ npx jsii-pacmak
dist/python
디렉터리에 your_name.jsii_example-1.0.0.tar.gz
를 만들면 성공합니다.Python에서 실행
방금 만든 패키지 파일을 Python 라이브러리로 설치합니다.
$ pip install dist/python/your_name.jsii_example-1.0.0.tar.gz
import 이 라이브러리는 아까fizzz 함수를 호출한Python 프로그램을 기술합니다.python.py
import your_name.jsii_example
obj = your_name.jsii_example.MyClass()
print(obj.fizz_buzz(2))
print(obj.fizz_buzz(3))
print(obj.fizz_buzz(5))
print(obj.fizz_buzz(15))
드디어 실행할 것이다.$ python python.py
2
Fizz
Buzz
FizzBuzz
TypeScript로 쓴 코드를 Python에서 호출할 수 있습니다!Docker에서 jsii 사용하기
지금까지 설명한 실행 환경 구축은 여러 언어를 설치해야 하기 때문에 좀 번거롭기 때문에 이번
jsii
에 필요한 Python과 Node를 실행합니다.나는 js를 집중적으로 준비할 수 있는 Dockerfile을 준비했다.FROM python:3.7.5-slim
ENV DIR /app
WORKDIR $DIR
RUN apt update && apt install -y nodejs npm
# setup python
COPY requirements.txt $DIR
RUN pip install --requirement requirements.txt
# setup node
COPY package.json $DIR
RUN npm install
# main: lib/index.ts
COPY lib/ $DIR/lib
상기package.json
,requirements.txt
,lib/index.ts
을 준비한 후 다음과 같이 사용합니다.$ mkdir dist
$ docker build --tag jsii-example .
$ docker run --rm --volume $(pwd)/dist:/app/dist jsii-example /bin/bash -c 'npx jsii && npx jsii-pacmak'
dist/
다음과 같은 패키지 파일이 생성되면 성공합니다.jsii의 구조
jsii의 구조에 대해 jsii의 문서에 설명이 있습니다.
jsii/runtime-architecture.md at master · aws/jsii
Python 등 호스트 코드가 jsii 사용 위치에 도착했을 때 node의 하위 프로세스를 시작하고 프로그램을 실행합니다. 그 결과는 Python이 수신한 것 같습니다.호스트의
/tmp
디렉터리를 보면, 프로그램이 npm install에 잠시 있다고 느낄 수 있는 징후를 발견할 수 있습니다.원래 파이썬만 끝났는데 노드야.문서에서도 성능은 희생적이라고 언급했는데, 왜냐하면 이것은 js와의 통신에 의존하기 때문이다.jsii는 생산 환경 등 성능을 요구하는 응용 프로그램의 동작이 어려워 개발 및 구축용 도구 등에서 사용될 예정이다.
jsii 이용례
jsii는 AWS에서 개발한 OSS입니다.실제 사용례로 AWS에서 제공하는 Infrastructure as Code의 도구AWS CDK에서 jsii를 사용했다.aws-cdk는 jsii와 같고 TypeScript,Python입니다.이제 인프라 구성을 NET, Java로 설명할 수 있습니다.
AWS 클라우드 개발 FAQ 참조
AWS는 TypeScript를 통해 AWS 패킷의 업무 논리를 구축하고 지원하는 프로그래밍 언어마다 매핑을 제공합니다.이로써 AWS CDK 구축체의 행동이 서로 다른 언어 간에 일치하도록 확보하고 모든 언어에 사용할 수 있는 전면적인 구축 패키지를 제공할 수 있다.AWS CDK 프로젝트에서 생성된 모든 코드는 원하는 프로그래밍 언어를 기반으로 합니다.JavaScript가 실행될 때는 고객 프로그래밍 경험의 구현 세부 사항입니다.https://github.com/aws/jsii에서 jsii 프로젝트를 볼 수 있습니다.
Tips
targets
에서 ruby
로 지정되면 jsii
에서 정상적으로 작동하고 dist/ruby/
에서 유사한 포장된 파일을 생성하지만 TypeScript 소스 코드가 포함된 프로그램만 이동하는 것 같아서gem의 생성을 실현하지 못했다.총결산
jsii를 사용하면 Python의 소스 코드에서 TypeScript 쓰기 프로그램을 실행할 수 있습니다.아직 개발 중인 부분의 제한이 많지만 실제로는 AWS CDK에서 사용되기 때문에 어느 정도 전망이 있다."여러 언어에서 하나의 코드를 바탕으로 만든 도구를 이용하고 싶다"면, 이 jsii는 선택할 수 있다고 생각합니다.
이번에 사용한 프로그램도 GitHub에 업로드되었습니다.관심 있으신 분은 보세요.
https://github.com/s2terminal/jsii-example
Reference
이 문제에 관하여(파이썬 등 모바일 TypeScript로 쓴 프로그램의 마법'jsii'를 소개합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/suzuki_sh/items/85dd85d107f453645ac9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)