日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用pkg打包node应用

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用pkg打包node应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

node相比其它C艸等語言的好處是直接裝好node環境后node xxx.js就可以運行了,非常方便。但是這樣的話別人就能直接看到源代碼,而且每次部署都需要node環境,并且安裝相關的依賴。

此時pkg這個庫就能解決介個問題。最近因為項目需求方需要,搞了下這方面的需求。

正確的姿勢。例如項目的入口文件是app.js

1、項目根目錄下安裝pkg

npm i -D pkg

2、打包配置

參考pkg文檔。pkg可以在任意系統上打包全平臺的可執行文件。例如我的需求是需要打包win64位系統node8環境的包。只需要package.json的scripts下配置。.的話是去讀取bin的入口文件。

"pkgwin": "pkg . -t node8-win-x64 -o app",

bin路徑

"bin": "./app.js"

需要注意的是pkg只會分析require的文件并打包在一起,如果是動態拼接的路徑就不會打包進去。

例如我的項目下有的是開啟子進程的代碼

const trackWorker = child_process.fork(`${__dirname}/workers/trackChild.js`);

此時,需要告訴pkg需要手動打包的文件

"pkg": {"scripts": "workers/**/*.js"},

這樣就大功告成了

4、實現自定義配置文件

數據庫等其它的配置我們肯定需要暴露出來的,畢竟打包出來就只有一個二進制文件。配置就需要特殊處理下。預期是打包出來最終運行的時候是

  • 目錄
    • app.exe
    • config.json

我們只需要改config.json的配置就行了。也很簡單,就是讀取配置的時候去讀取json文件就行(文檔也讓我們盡量用json而不是js,因為node的模塊加載制止我們的config.js代碼會被執行,別人會讀取到源碼)

const fs = require("fs"); const path = require("path");const configPath = path.join(process.execPath, "../","./config.json"); let isConfigExist = fs.existsSync(configPath);let jsonConfig = null if (isConfigExist) {jsonConfig = JSON.parse(fs.readFileSync(configPath, "utf8")); }

5、部署

pm2也是可以直接部署可執行文件,不過使用這種部署的話就只能使用fork模式 ,而不能使用cluster模式。

最后附上package.json和pm2的配置

{"name": "webapi","scripts": {"start": "nodemon ./app.js","pm2": "pm2 start pm2.json","pkgmac": "pkg . -t node8-macos-x64 -o app","pkgwin": "pkg . -t node8-win-x64 -o app","pkg": "pkg . -t node10-win-x64 -o app"},"bin": "./app.js","pkg": {"scripts": "workers/**/*.js"},"dependencies": { ...},"devDependencies": {"nodemon": "^1.11.0","pkg": "^4.3.5"} } {"apps": [{"name": "webAPI","script": "app","cwd": "./","error_file": "./logs/app-err.log","out_file": "./logs/app-out.log","log_date_format": "YYYY-MM-DD HH:mm Z","max_memory_restart": "300M"}] }

可能遇到問題:

第一次打包的時候,會遇到下包很慢很可能超時的問題。如下:

到https://github.com/zeit/pkg-fetch/releases下載對應的包,然后
~/.pkh-cache/2.5/目錄下,改名為fetched-v8.11.3-macos-x64(參考運行時下的包名字改)即可。參考https://github.com/zeit/pkg/issues/419

總結

以上是生活随笔為你收集整理的使用pkg打包node应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。