@rollup/plugin-commonjs : CommonJS 모듈 형식으로 작성된 코드를 ES 모듈 형식으로 변환한다.
@rollup/plugin-node-resolve : 외부 모듈(node_modules) 사용 시 사용한다.
rollup-plugin-polyfill-node : Node.js 환경에서 사용 가능한 전역 객체나 함수를 브라우저에서 사용할 수 있도록 polyfill을 제공한다.
이러한 용도로 해당 플러그인을 설정했다.
Setting
1 2 3 4 5 6 7 8 9 10 11 12 13
import commonjs from '@rollup/plugin-commonjs'; import {nodeResolve} from '@rollup/plugin-node-resolve'; import nodePolyfills from 'rollup-plugin-polyfill-node';
MODULARIZE을 추가한 이유는 익스포트한 자바스크립트가 모듈 형태로 되는 것도 있고, 이 모듈이 factory 함수 형태 반환하는데 factory 함수를 호출하면, 생성된 모듈이 다운로드되고 인스턴스화되는 과정이 진행되며 factory 함수가 반환하는 Promise가 resolved가 된다고 한다.
로딩이 완료되는 시점에 c++로 바인딩한 함수를 사용할 수 있게 된다. 로드가 안된 상태에서 불러오는 불상사를 막을 수 있다.
소스 코드가 빌드 될 때 실행되는 커스텀 명령어를 정의했다. 웹 관련 코드가 저장되어 있는 디렉토리로 작업 디렉토리를 변경하고, 롤업의 설정파일을 실행했다. 그러면 롤업 설정에 따라 dist 디렉토리에 번들링한 index.js가 생성되었을 것이다. 그 다음 코드는 wasm 파일을 dist 파일로 복사한다.
이러면 c++ 빌드할 때 자동으로 번들링까지 진행된다!!!
이제 취향껏 package.json의 scripts에 작성을 추가하면 된다.
여담
자바스크립트나 웹 환경을 잘 모르는 초보 개발자가 해냈습니다. 추후에 라이브러리나 SDK로 배포를 하게 된다면 최종적으로 사용자가 쓰는 부분은 깔끔하게 간단하게 쓰이는 것이 좋다고 생각해서 이것저것 조사해보고 시행착오 끝냈다.
나름 검색해도 정보가 사혼의 조각처럼 흩어졌기 때문에 정리했다!! 이제는 좀 더 작게작게 emscripten의 팁을 올려야겠다.
그 후 위에 작업한 것을 커밋을 하기 위해 새로운 폴더를 만들고 github action 안에서 커밋을 했지만 맘에 들지 않았다. content/post/start 로 되어있는 것보다 post 폴더 안에 있는 내용물만 푸시하고 싶기 때문이다. 그래서 peaceiris/actions-gh-pages@v3 소스코드를 까봤다.
여기서 해결하는 방법은 푸시하고 싶은 내용물이 든 폴더에 .git 폴더를 복사해 넣고 커밋한 후 푸시하는 것이다!! 나는 해당 폴더에 git init로 초기화 해 다시 다 설정해야하나 생각했는데 .git폴더를 복사하면 설정을 다시 안해도 되기 때문에 좋다!!
폴더 만들고 .git파일 복사하고 커밋할 파일 옮기고 커밋하고 푸시하는 것까지 완료했다. 이제 hugo-content 브런치에는 hugo 형태의 포스터 파일만 남아있게 되었다!!
썸네일 추가하기
간지나게 썸네일도 추가하고 싶었다. 썸네일이 없으니 심심해서 추가하고 싶었다. 근데 썸네일을 찾아서 추가하고 싶지는 않았다. 자동으로 그리는 프로그램을 만들어야 하나??? 아니면 좀 더 빠르게 할 수 있는 방법이 있지 않나 생각보다가 NASA에서 매일마다 우주 사진을 업로드를 해준다는 것이 생각났다.
"""Module providingFunction printing python version.""" import random from datetime import datetime import os import requests import sys
defrandom_date(): """ "random" to get one date from 2015-01-01 to today Returns: date(str) """ start_date = datetime.today().replace(day=1, month=1, year=2015).toordinal() end_date = datetime.today().toordinal() return datetime.fromordinal(random.randint(start_date, end_date)).strftime("%Y-%m-%d")
hugo 포맷 설정하는 것이 끝나면 hugo 사이트의 레파지토리를 체크아웃해서 서브모듈 업데이트하고 푸시하면 된다. 아쉽게도 템플릿도 서브모듈로 등록되었기 때문에 같이 업데이트 해줄 것이다. PRIVATE_TOKEN_GITHUB은 https://github.com/settings/tokens 에서 토큰 만들고 Repository secrets 에 등록하면 된다.
마지막으로..
이렇게 HackMD에서 작성한 글을 자동으로 hugo 사이트의 포스트로 만들도록 했다. 생각보다 github action 다루는 것이 어려워 엄청 많은 시도를 했다. 물론 테스트 레파지토리에서… 아직 몇 가지 더 많이 남았지만 우선 이 정도로 마무리 짓고 더 업그레이드 할 것이다.
예를 들어 gist 포맷을 자동으로 바꿔준다던가… 등등
사실 글을 쓰고 날짜 맞춰서 추가해주고 폴더도 만들어서 추가해주는 것이 이걸 만드는 것보다 시간 소모가 덜 될 수도 있다고 생각이 들기는 하지만 이런 것도 신경써야하기 때문에 그냥 자동화 해버렸다.