javascript 실행 프로그램 만들기
node.js 로 실행되는 프로그램을 single executable file로 만들어 보자.
우선, node환경에서 잘 실행되는 프로그램인지 확인할것.
single executable file로 만들어 주는 솔루션이 몇가지 있는데,
nexe로 하려다가 실패하고 pkg로 성공함.
pkg를 설치함.
설치법은 인터넷에 많이 있음.
package.json 에 필요한 설정을 좀 넣어줘야함.
pkg command로 하는 방법도 있지만, 파라미터들이 늘어날 수록 귀찮게 타이핑이 늘어나고 관리하기 힘드므로,
package.json에 기록하는 방법으로 함.
기존에 있던, scripts에 아래 항목을 추가하면 나중에 npm run build 만 수행해서 사용할 수 있도록 함.
"scripts": {
// 아래 추가할 스크립트의 pkg를 오른쪽 파라미터와 함께 실행하라는 의미.
"build": "pkg . --out-path bin"
}
그리고, pkg 를 추가함. 위에서 build에 pkg를 추가 했으므로 아래 내용이 있어야함.
"pkg": {
"scripts": "./bin/gltf-pipeline.js",
"targets": [
"node10-win-x64"
],
"assets": [
"./node_modules/cesium"
]
}
node에서 실행할때, 사용하던 node ./bin/gltf-pipeline.js 를 위에처럼 추가함.
targets 은 지정하지 않으면, linux, window, osx 3가지 모두 만듬.
마지막 assets은 처음에 추가하지 않고 수행했었는데 아래와 같이 에러가 나서..
아, cesium이 필요하구나 해서 찾아보니 assets에 추가하라고 해서 나중에 추가해줌.
다른것도 저런식으로 에러가 나면, 계속 추가해 주는 방식으로 하면될것 같음.
pkg/prelude/bootstrap.js:1244
throw error;
^
Error: Cannot find module 'D:\snapshot\gltf-pipeline-master\node_modules\cesium\Build\CesiumUnminified\Cesium'
1) If you want to compile the package/file into executable, please pay attention to compilation warnings and specify a literal in 'require' call. 2) If you don't want to compile the package/file into executable and want to 'require' it from filesystem (likely plugin), specify an absolute path in 'require' call using process.cwd() or process.execPath.
이제 다됐으면, 프로젝트 root 폴더, package.json이 있는곳에서
위에서 이야기 한대로, npm run build 만 수행하면 됨.
드뎌, 실행파일이 생성됨.
ㅡㅡ; 근데 실행파일이 굉장히 크다.
확실히, 빈번하게 실행되는 exe를 만들려면 자체 서비스로 만들던지.
파일 파라미터로 수행할 job을 배열로 넘겨받도록 해서 한번에 처리하도록 하는 방식을 써야 겠다.
새로운 모듈이 추가되거나 할때, 해당 모듈이 native 라이브러리를 사용하거나 하면, 배포 오류를 해결하는것이 짜증이 나서, 최근에는 그냥, node.exe 와 js 소스를 그대로 배포해서 실행하는 방향으로 진행하고 있음. 파일 그대로 복사만 하면 배포가 끝나서 맘이 후련함. 대신, 소스가 그대로 오픈됨 ( ㅡㅡ; ) |