簡體   English   中英

使用 node pkg 通過 npm config 創建可執行文件

[英]Using node pkg to create executable with npm config

我正在使用pkg為我的節點 js 應用程序創建一個可執行文件。 這很好用。 但是,我也使用config 模塊根據環境加載 yaml 配置文件。 使用 pkg 打包應用程序時,我指定應包含 config 文件夾。

  "pkg": {
    "assets": [
      "config/*"
    ]
  }

當我運行pkg . --debug pkg . --debug ,我可以看到配置文件正在打包。 但是,如果我然后重命名配置文件夾,刪除文件夾,或者只是將新打包的 exe 移動到不同的文件夾,它會說No configurations found in configuration directory:C:\\Users\\me\\folderwithexe\\config (這個配置目錄沒有不存在,因為我將 exe 移動到了一個新文件夾)

據我所知, config模塊似乎正在尋找與 exe 執行位置相關的配置文件夾。 即使它在那里,它也沒有從打包的 exe 文件中獲取它。 因此,如果您要在另一台計算機上運行此 exe(這是計划),那么它會在 exe 之外尋找 config 文件夾。 其他模塊似乎都沒有這個問題。 這只是這個配置模塊。

知道如何讓pkg模塊和config模塊協同工作嗎?

這是我的完整package.json

{
  "name": "my-app",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "author": "Me",
  "license": "UNLICENSED",
  "dependencies": {
    "config": "^3.3.1",
    "js-yaml": "^3.14.0",
  },
  "bin": "app.js",
  "pkg": {
    "assets": [
      "config/*"
    ]
  }
}

pkg 將捆綁每個 require 依賴項以及它在配置列表(資產和腳本)中找到的每個資產或腳本。 所以,首先你需要讓你的配置文件遠離 pkg。

為了使 pkg 遠離您的配置文件,您可以使用 pkg 無法解析的變量路徑,例如:

const config = require(path.join(__dirname, 'config/config.json'));

此時 pkg 不會捆綁您的配置文件,但是如果您運行構建,您會注意到 config.json 的路徑類似於/snapshot/config/config.json ( https://www.npmjs.xml )。 com/package/pkg#snapshot-filesystem )

另一種方法是使用process.execPath從二進制路徑獲取配置文件:

const config = require(path.join(process.execPath, "../","./config/config.json"));

之后,可執行文件將從運行目錄的“相對路徑”中獲取配置文件。

我不使用 config 模塊進行測試,但是如果您從package.json的 pkg 屬性中刪除assets: ["config/*"]並將新路徑添加到 config 模塊(上圖),它將起作用。

process.env["NODE_CONFIG_DIR"] = path.join(process.execPath, "../","./config/");
const config = require("config");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM