node打包可執行文件工具——Pkg使用心得

来源:https://www.cnblogs.com/mordom/archive/2018/01/23/8337337.html
-Advertisement-
Play Games

2017年npm上最熱門的項目之一——Pkg,可以直接將node.js項目打包成windows可以直接執行的exe文件(也支持FreeBSD、linux、macos、arm系統),並且無須修改你項目中的任何代碼。本文對該項目作了簡要說明與教程,並提供了一個簡單示例來說明其使用場景。 ...


項目地址

這個項目很神奇,直接將node.js項目打包成windows可以直接執行的exe文件(也支持FreeBSD、linux、macos、arm系統),甚至不需要安裝Node.js,且無須修改你項目中的任何代碼!

首先安裝pkg

npm install -g pkg

然後在項目目錄下執行

pkg entrance.js

即可打包linux,macos,win3個平臺的可執行文件。entrance.js為你node項目的入口文件。

如果只想打包windows下的exe,則加上-t參數。win即為打包成windows平臺下的exe文件,具體可選參數參見項目目錄

pkg -t win entrance.js

 

稍等片刻後項目目錄下就會生成打包好的entrance.exe文件。

pkg會自動從入口文件開始查找依賴的文件並全數打包進去,無須修改項目里的任何代碼。

 

其他

pkg可以根據package.json下的配置進行打包,預設入口文件為bin指向的文件。 執行
pkg .

或是

pkg package.json

即可自動按照package.json的配置打包。

//package.json
{
    //其他配置項
    "bin": "service.js",//入口文件
    "pkg": {
        "scripts": [
            "build/**/*.js"//需要打包進來的其他js文件,可添加多個
        ],
        "assets": [
            "dist/**/*"//靜態文件的目錄,可添加多個
        ]
    }
}    

註意:靜態文件需要在項目中將文件的引用換成

path.join(__dirname, 'dist')

的形式,才可以正常打包,否則可能會讀取不到。

 

示例

使用vue-cli建立項目,並使用npm run build將你的項目編譯生成靜態文件到dist目錄下。這些都是vue-cli自帶的內容,不再贅述。

在項目目錄下新建一個service.js文件,並添加以下代碼,在本地起一個express靜態伺服器,使你能夠在本地訪問你的網站(部署到線上也是類似)

//service.js
const express = require('express');
const app = express();
const path = require('path');
 
app.use(express.static(path.join(__dirname, 'dist')));//註意這裡使用path.join(__dirname, 'dist')而不是'dist',雖然在命令行中執行起來效果是一樣的,不過pkg打包會無法識別到dist目錄
 
var server = app.listen(8081, function () {
    var host = server.address().address
    var port = server.address().port
    console.log(`AIbuy agents server start successfully on http://${host}:${port}`)
})

 

此時你可以在控制台執行

node service.js

來啟動你的伺服器了,啟動完成後,瀏覽器訪問http://localhost:8081/即可查看你的網站。

 

接下來我們使用將service.js和dist目錄打包成一個exe文件,方便他人使用

首先安裝pkg

npm install -g pkg

然後修改package.json,添加bin(如果不是service.js的話)和pkg項

{
    //其他配置項
    "bin": "service.js",//指定入口文件
    "pkg": {
        "assets": [
            "dist/**/*"//指定要打包的靜態文件目錄
        ]
    }
}

然後在項目目錄下執行

pkg -t win package.json

完成後即生成一個exe文件,雙擊啟動即相當於執行node service.js,然後你瀏覽器里(http://localhost:8081/)就能訪問打包好的項目了!也不需要提前安裝node,給老闆演示很方便有木有!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近發現css遺忘了很多,原因在於平時很少用到一些樣式,現記錄一些平時工作中使用頻率比較少的屬性以備查看。 1.文本屬性 首行文本縮進,針對於塊級元素,text-indent 可以使用所有長度單位,包括百分比值。百分比是相對於父級元素設置的。 文本對齊屬性值中有個justify是兩端對齊,之前用的比 ...
  • 簡介 前面寫了一篇文章講解了position常用的幾個屬性:《CSS 屬性之 position講解》一般都知道下麵幾個常用的: 在https://developer.mozilla.org/zh-CN/docs/Web/CSS/position還說了下麵這三個值: 估計大部分都沒有用過positio ...
  • 1:字元串 JS中的任何數據類型都可以當作對象來看。所以string既是基本數據類型,又是對象。 2:聲明字元串 var sStr = ‘字元串’; var oStr = new String(‘字元串’); 3:字元串屬性 1.length 計算字元串的長度(不區分中英文)。 2.construc ...
  • 模塊載入過程: 路徑分析 文件定位 模塊編譯 Node對引入過的模塊都會進行緩存,以減少二次引入時的開銷。緩存的是編譯和執行之後的對象。require時對緩存中的模塊是第一優先順序的 路徑分析 模塊標識符:require的參數,按書寫形式可以分成以下幾類: 核心模塊:如http,fs,path 文件模 ...
  • 轉載請註明出處: "Generator函數非同步應用" 上一篇文章詳細的介紹了Generator函數的語法,這篇文章來說一下如何使用Generator函數來實現非同步編程。 或許用Generator函數來實現非同步會很少見,因為ECMAScript 2016的async函數對Generator函數的流程式控制 ...
  • 介紹HTTP緩存之前先簡單說一下Web緩存 Web緩存是一種保存Web資源副本併在下次請求時直接使用該副本的技術。        Web緩存可以分為這幾種:瀏覽器緩存、CDN緩存、伺服器緩存、資料庫數據緩存 。因為可能會直接使用副 ...
  • 本文設計到常見對文檔的處理樣式,和塊,行標簽的特點。 沒用什麼重要內容,只是自己的一些知識點的回憶,對以前知識的一個梳理過程,望某懶蟲加油!!! ...
  • classList屬性的方法:add();remove();toggle(); 描述,在一些頁面我們需要使用兩個按鈕來回切換,如圖: 我們要使用到add()和remove()方法 html部分: <div class="login-title"> <a href="javascript:void(0 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...