[英]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.