小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

使用pkg打包node應(yīng)用

 QomoIT 2020-07-28

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

此時(shí)pkg這個(gè)庫(kù)就能解決介個(gè)問題。最近因?yàn)轫?xiàng)目需求方需要,搞了下這方面的需求。

正確的姿勢(shì)。例如項(xiàng)目的入口文件是app.js

1、項(xiàng)目根目錄下安裝pkg

npm i -D pkg

2、打包配置

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

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

bin路徑

"bin": "./app.js"

需要注意的是pkg只會(huì)分析require的文件并打包在一起,如果是動(dòng)態(tài)拼接的路徑就不會(huì)打包進(jìn)去。

例如我的項(xiàng)目下有的是開啟子進(jìn)程的代碼

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

此時(shí),需要告訴pkg需要手動(dòng)打包的文件

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

這樣就大功告成了

4、實(shí)現(xiàn)自定義配置文件

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

  • 目錄
    • app.exe
    • config.json

我們只需要改config.json的配置就行了。也很簡(jiǎn)單,就是讀取配置的時(shí)候去讀取json文件就行(文檔也讓我們盡量用json而不是js,因?yàn)閚ode的模塊加載制止我們的config.js代碼會(huì)被執(zhí)行,別人會(huì)讀取到源碼)

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也是可以直接部署可執(zhí)行文件,不過使用這種部署的話就只能使用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"
    }
  ]
}

可能遇到問題:

第一次打包的時(shí)候,會(huì)遇到下包很慢很可能超時(shí)的問題。如下:

image

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多