應(yīng)用pkg打包node項(xiàng)目

如今公司有以私有部署增加營(yíng)收的打算,于是便著手開始對(duì)所負(fù)責(zé)項(xiàng)目進(jìn)行一鍵打包醇锚。

pkg簡(jiǎn)述

既然是私有部署,自然需要做到易于部署,保護(hù)代碼焊唬,易于維護(hù)恋昼。

https://github.com/zeit/pkg

pkg便能滿足這些需求

This command line interface enables you to package your Node.js project into an executable that can be run even on devices without Node.js installed

首先看一下官方的簡(jiǎn)介,pkg能將node.js項(xiàng)目打包成一個(gè)不需要node環(huán)境就可以運(yùn)行的可執(zhí)行文件

pkg使用

這里直接使用package.json 進(jìn)行打包(當(dāng)然也可以針對(duì)js文件直接進(jìn)行打包赶促,此處不做贅述)液肌,

"bin": "index.js",//項(xiàng)目啟動(dòng)文件

"pkg": {"scripts": "build/**/*.js","assets": "views/**/*" } //需要額外打包進(jìn)去的目錄

在package.json中增加這段,scripts鸥滨,assets配置未打包進(jìn)可執(zhí)行文件的js/json 文件及其他資源文件嗦哆,文件路徑可以使用glob通配符

這是由于pkg只會(huì)自動(dòng)打包require或__dirname的文件(如下),其余文件需手動(dòng)配置

require('./build/'+cmd+'.js')

path.join(__dirname,'views/'+viewName)


之后使用以下命令即可打包婿滓,

pkg .? --target node8-linux --out-path package

(使用node8版本打包一個(gè)linux可運(yùn)行文件老速,放入package文件夾中,詳細(xì)參數(shù)參見https://github.com/zeit/pkg/blob/master/README.md)

同時(shí)需要的是凸主,打包進(jìn)可執(zhí)行文件中的文件橘券,以下的系統(tǒng)文件路徑發(fā)生了變化。因此如有必要卿吐,需要對(duì)文件地址進(jìn)行調(diào)整旁舰。

注意事項(xiàng)

以下是實(shí)際打包中遇到的一些問題及解決方法,

1.pkg無(wú)法識(shí)別引用的變量地址

require('./test/'+ test +'.js')

由于路徑不是常量嗡官,pkg無(wú)法識(shí)別要打包的文件是什么鬓梅,因此盡量將引用地址寫為常量地址

如果node_modules里的文件引用存在該現(xiàn)象怎么辦呢?

筆者這次便遇到了這個(gè)問題谨湘,于是采用改寫node_modules相關(guān)類庫(kù)相關(guān)文件,通過patch-package進(jìn)行補(bǔ)丁打包芥丧,請(qǐng)參考 https://github.com/ds300/patch-package#readme

2.pkg無(wú)法打包Native addons (.node?files)?

Native addons (.node?files) use is supported, but packaging?.node?files inside the executable is not resolved yet. You have to deploy native addons used by your project to the same directory as the executable.

看一下官方的處理方法紧阔,把這類文件拿出來(lái)放在可執(zhí)行文件相同的目錄里。

3.配置文件外部掛載续担,方便運(yùn)維維護(hù)

對(duì)config的引用進(jìn)行處理

var fs =require('fs');

try {

var configJson =JSON.parse(fs.readFileSync(

process.cwd() +'/config.json',

? 'utf-8'));

}catch (e) {

? configJson =null;

}

var config =configJson ?configJson :require('./config.json');

exports.config =config;

優(yōu)先讀取掛載在外部的配置文件擅耽,如果不存在再讀取pkg內(nèi)部的快照文件,如此便實(shí)現(xiàn)了外部掛載物遇,

方便運(yùn)維對(duì)配置文件進(jìn)行修改乖仇。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市询兴,隨后出現(xiàn)的幾起案子乃沙,更是在濱河造成了極大的恐慌,老刑警劉巖诗舰,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件警儒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蜀铲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門边琉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人记劝,你說(shuō)我怎么就攤上這事变姨。” “怎么了厌丑?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵定欧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我蹄衷,道長(zhǎng)忧额,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任愧口,我火速辦了婚禮睦番,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耍属。我一直安慰自己托嚣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布厚骗。 她就那樣靜靜地躺著示启,像睡著了一般。 火紅的嫁衣襯著肌膚如雪领舰。 梳的紋絲不亂的頭發(fā)上夫嗓,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音冲秽,去河邊找鬼舍咖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛锉桑,可吹牛的內(nèi)容都是我干的排霉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼民轴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼攻柠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起后裸,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瑰钮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后微驶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體飞涂,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了较店。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片士八。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梁呈,靈堂內(nèi)的尸體忽然破棺而出婚度,到底是詐尸還是另有隱情,我是刑警寧澤官卡,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布蝗茁,位于F島的核電站,受9級(jí)特大地震影響寻咒,放射性物質(zhì)發(fā)生泄漏哮翘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一毛秘、第九天 我趴在偏房一處隱蔽的房頂上張望饭寺。 院中可真熱鬧,春花似錦叫挟、人聲如沸艰匙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)员凝。三九已至,卻和暖如春奋献,著一層夾襖步出監(jiān)牢的瞬間健霹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工瓶蚂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糖埋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓扬跋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凌节。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钦听,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容