zx 노드를 만듭니다.pkg이 있는 2진 js 스크립트
7731 단어 javascriptnode
그러나 그 단점 중 하나는 지금 노드를 가져야 한다는 것이다.js runtime는 이 스크립트를 실행해야 하는 컴퓨터에 설치됩니다.이것은 매우 슬프다.
하지만 스크립트와 노드를 포함하는 바이너리 파일을 만들 수 있다면?js가 실행될 때?
pkg 살려주세요!
우선, 간단한 zx 스크립트를 만듭니다.노드가 있는지 확인하십시오.js 16 + 를 기계에 설치한 다음 셸을 열고 다음 명령을 입력하여 새 디렉터리를 만들고 노드를 초기화합니다.js 프로젝트.
$ cd /my/projects
$ mkdir my-cli
$ cd my-cli
$ npm init -y
현재 package.json
파일이 있어야 합니다. 이 파일에 "type": "module"을 추가해야 zx가 정상적으로 작동할 수 있습니다.{
"name": "my-cli",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
+ "type": "module"
}
다음은 zx를 의존항으로 추가할 수 있습니다.$ npm install zx
우리 예쁜 대본 쓸 준비 됐어!폴더src
를 만들고 다음을 포함하는 파일을 추가합니다index.js
.// src/index.js
import { $ } from "zx";
async function main() {
await $`date`;
}
main().catch((err) => console.log(err));
지금 껍질에서 써도 돼요.$ node src/index.js
이것은 기계의 현재 날짜와 시간을 출력할 것이다.그러나 보시다시피, 스크립트 (또는 node
를 실행할 때 (예시에서 보듯이) 를 사용해야 합니다.예를 들어 기계에 노드가 없으면 이상적이지 않기 때문이다.js나 zx를 설치한 후 스크립트를 실행할 수 없습니다.이 문제의 해결 방안은 실행할 때 우리의 스크립트와 실행 가능한 바이너리 파일로 포장한 다음, 기계가 설치되어 있지 않아도 실행할 수 있도록 하는 것이다.
포장에 대해서는 pkg 라이브러리를 사용할 것입니다.불행하게도, 우리는
zx
를 "type": "module"
에 추가하여 Pkgis not supporting ES modules을 설정합니다.따라서 Pkg을 사용하기 전에 ES 모듈을 사용하지 않는 버전으로 스크립트를 컴파일해야 합니다.우리는 esbuild를 사용하여 번역할 것이다.esbuild는 스크립트를 파일에 묶을 수 있기 때문에 컴파일된 파일에 package.json
폴더에 대한 의존 항목이 없습니다.설치하라고.$ npm install --save-dev esbuild
node_modules
에 npm 스크립트를 추가하여 컴파일합니다.{
"name": "my-cli",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
+ "compile": "esbuild src/index.js --platform=node --target=node16 --bundle --outfile=dist/outfile.cjs"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "module",
"dependencies": {
"zx": "^6.0.1"
},
"devDependencies": {
"esbuild": "^0.14.27"
}
}
이 npm 스크립트는 esbuild를 실행하고 package.json
를 입구점으로 사용하며 esbuild를 출력 노드로 설정합니다.js v16 + 호환 파일 src/index.js
.dist/outfile.cjs
파일의 끝은 매우 중요합니다. 그렇지 않으면 Pkg은 ES 모듈로 가방을 불러오려고 시도할 것입니다. 설령 우리가 그것을 컴파일했다 하더라도.이제 스크립트를 컴파일할 수 있습니다.
$ npm run compile
너는 껍데기에서 유사한 것을 볼 수 있다.> [email protected] compile
> esbuild src/index.js --platform=node --target=node16 --bundle --outfile=dist/outfile.cjs
dist/outfile.cjs 439.1kb
⚡ Done in 246ms
다음에 pkg 라이브러리를 설치하고 npm 스크립트를 추가합니다.$ npm install --save-dev pkg
.cjs
: (스크립트를 컴파일한 후의 쉼표를 잊지 마세요){
"name": "my-cli",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"compile": "esbuild src/index.js --platform=node --target=node16 --bundle --outfile=dist/outfile.cjs",
+ "package": "pkg dist/outfile.cjs --targets node16 --output dist/my-cli --debug"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "module",
"dependencies": {
"zx": "^6.0.1"
},
"devDependencies": {
"esbuild": "^0.14.27",
"pkg": "^5.5.2"
}
}
package.json
스크립트가 pkg을 실행하고 dist/outfile을 사용합니다.cjs를 입구점으로 합니다.그것은 또한 우리가 원하는 노드를 배치했다.js 16을 목표로 실행할 때 파일을 출력해야 합니다. package
현재 dist/my-cli
스크립트를 실행하면, package
폴더에서 바이너리 파일을 보길 원할 것입니다.$ npm run package
이것은 대량의 디버깅 정보를 출력합니다. 이 정보를 무시할 수 있습니다.하지만 문제가 있다면 유용한 정보를 통해 문제를 진단할 수 있다.개발자 기계의 운영체제와 프로세서 체계 구조만 호환되는 바이너리 파일을 출력한다는 것을 기억하십시오.따라서 x64 프로세서가 있는 Windows 기기에서
dist
명령을 실행하면 바이너리 파일은 리눅스나 맥OS 기기에서 작업을 할 수 없습니다.그곳에서 작업을 하려면 더 많은 목표를 포함하기 위해 패키지 명령을 변경하거나 (참조 the documentation for that 같은 OS/프로세서 시스템 구조에서 패키지 명령을 실행해야 합니다.현재, 파일 브라우저에서 사용자가 사용하는 운영체제에 따라 파일
npm run package
이나 dist/my-cli
을 볼 수 있습니다.이 파일은 셸에서 다음과 같은 호출을 통해 실행됩니다.$ ./dist/my-cli
만일 모든 것이 정상이라면, 너는 현재의 날짜와 시간을 보아야 한다🥳이 바이너리 파일은 현재 어떠한 운행도 할 수 없는 상황에서 사용할 수 있다. (같은 운영체제/프로세서 체계 구조에서만 실행할 수 있다면) 정말 좋다.
실행할 때 알 수 없는 위대한 스크립트를 작성하는 즐거움을 누리세요!
사진 작성자Markus Spiske가 Unsplash
Reference
이 문제에 관하여(zx 노드를 만듭니다.pkg이 있는 2진 js 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zauni/create-a-zx-nodejs-script-as-binary-with-pkg-5abf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)