如何將node服務(wù)打包成可執(zhí)行文件PKG
背景
有時(shí)我們需要寫一些node的服務(wù)或者是工具,但這些工具&服務(wù)可以運(yùn)行的前提條件是當(dāng)前環(huán)境需要安裝好node,有時(shí)候我們把這些工具&服務(wù)發(fā)送給別人,在別人的電腦中未必有安裝好的node版本,即便有也可能不是期望的指定的Node版本,在這樣的場(chǎng)景下我們可以把寫好的node 服務(wù) & 工具打包成一個(gè)可執(zhí)行文件發(fā)送給對(duì)方,將程序需要依賴的所有的東西,比如node環(huán)境,再比如跑RPA需要的瀏覽器環(huán)境也可以打包到我們自己的可執(zhí)行文件中。
PKG
我們可以借助pkg
這個(gè)工具將我們的應(yīng)用打包成一個(gè)可執(zhí)行文件在mac、linux 、windows
中執(zhí)行。
安裝
可以全局安裝可以以在當(dāng)前項(xiàng)目中安裝
npm install -g pkg
使用
一般兩種方式,簡(jiǎn)單一點(diǎn)的我們可以通過(guò)命令行的參數(shù)來(lái)打包,更加推薦一種方式是把相應(yīng)的參數(shù)寫在package.json
文件中,其中bin
字段就是打包的入口,pkg
字段就是打包時(shí)的一些配置參數(shù)。
比如看下面的配置
"scripts": { "build": "rm -rf dist && tsc && tsc-alias && cp package.json ./dist", "pkg": "npm run build && rm -rf package && pkg ." }, "bin": "dist/index.js", "pkg": { "targets": [ "node16-macos-arm64" ], "outputPath": "package" },
在命令行中執(zhí)行npm run pkg
就會(huì)將當(dāng)前的ts
工程的node服務(wù)應(yīng)用先打包到dist目錄下,然后再以dist/index.js
為入口文件打包這個(gè)node
服務(wù)為一個(gè)可執(zhí)行的文件。
打包出的可執(zhí)行文件是可以在mac
中運(yùn)行的,其出口是在outputPath
目錄下。
效果如下所示:
將chromium也打包進(jìn)二進(jìn)制執(zhí)行文件
在我們的業(yè)務(wù)代碼中提供一個(gè)接口可以在本地使用chromium
運(yùn)行RPA
,這就需要我們?cè)诖虬鼤r(shí)也需要將chromium
也一起打包進(jìn)我們的可執(zhí)行文件,這樣才能在運(yùn)行RPA
時(shí)可以找到對(duì)應(yīng)的環(huán)境。
比如下面這個(gè)例子,我們使用pupputeer
來(lái)做RPA
,當(dāng)程序執(zhí)行時(shí),用戶可以通過(guò)調(diào)用http://localhost:3012/rpa
來(lái)運(yùn)行本地的RPA
操作。
這里就以打開(kāi)百度網(wǎng)站輸入天氣并搜索為例子說(shuō)明。
如果我們按照上面的配置直接進(jìn)行打包的話,在電腦中運(yùn)行這個(gè)文件時(shí)會(huì)拋出以下的錯(cuò)誤:
大意是需要將node_modules/vm2/lib/setup-sandbox.js
顯示的指定需要加入到打包文件中。
完整的配置如下:
"bin": "dist/index.js", "pkg": { "scripts": [ "./node_modules/vm2/lib/setup-sandbox.js" ], "targets": [ "node16-macos-arm64" ], "outputPath": "package" },
然后再執(zhí)行打包命令,運(yùn)行效果如下所示:
使用這個(gè)技術(shù)我們以后就可以把寫好的工具&服務(wù)打包成一個(gè)可執(zhí)行文件直接丟給其他人,其他人無(wú)需在本地配置繁瑣的環(huán)境了,只需要點(diǎn)擊可執(zhí)行文件就可以享受對(duì)應(yīng)的功能服務(wù)了。
pkg
是一個(gè)很強(qiáng)大的打包工具,這里是以mac
平臺(tái)為例,其余的linux、windows
也是同樣的效果。
更多打包的配置可以參考PKG
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
nodejs實(shí)現(xiàn)簡(jiǎn)單的gulp打包
因?yàn)橹耙恢庇腥私o我推薦gulp,說(shuō)他這里好哪里好的。實(shí)際上對(duì)我來(lái)說(shuō)夠用就行。grunt熟悉以后實(shí)際上他的配置也不難,說(shuō)到效率的話確實(shí)是個(gè)問(wèn)題,尤其項(xiàng)目大了以后,目前位置遇到的項(xiàng)目都還可以忍受。不過(guò)不管怎么說(shuō),需要親自用過(guò)gulp之后才能品評(píng)他和grunt之間的優(yōu)劣。2017-12-12Node.js基礎(chǔ)入門之模塊與npm包管理器使用詳解
Node.js是一個(gè)基于Chrome?V8引擎的JavaScript運(yùn)行時(shí)。類似于Java中的JRE,.Net中的CLR。本文將詳細(xì)為大家介紹Node.js中的模塊與npm包管理器的使用,需要的可以參考一下2022-03-03使用node.js實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行CRUD操作
這篇文章主要為大家詳細(xì)介紹了如何使用node.js實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行CRUD(增刪改查)操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2024-12-12詳解Puppeteer前端自動(dòng)化測(cè)試實(shí)踐
這篇文章主要介紹了詳解Puppeteer前端自動(dòng)化測(cè)試實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02Node.js?網(wǎng)絡(luò)框架koa?compose中間件使用解析
這篇文章主要為大家介紹了Node.js?網(wǎng)絡(luò)框架koa?compose中間件使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12NPM命令運(yùn)行報(bào)錯(cuò):npm?v10.2.4?is?known?not?to?run?on?Node.js
這篇文章主要給大家介紹了關(guān)于NPM命令運(yùn)行報(bào)錯(cuò):npm?v10.2.4?is?known?not?to?run?on?Node.js?v14.21.1的解決辦法,文中將解決辦法介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01