Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用node pkg使用npm config创建可执行文件_Javascript_Node.js_Npm_Yaml - Fatal编程技术网

Javascript 使用node pkg使用npm config创建可执行文件

Javascript 使用node pkg使用npm config创建可执行文件,javascript,node.js,npm,yaml,Javascript,Node.js,Npm,Yaml,我正在使用为我的node js应用程序创建一个可执行文件。这很有效。但是,我还使用基于环境加载yaml配置文件。当使用pkg打包应用程序时,我指定应该包括config文件夹 "pkg": { "assets": [ "config/*" ] } 当我运行pkg时--调试,我可以看到配置文件正在打包。但是,如果我随后重命名配置文件夹,删除该文件夹,或者只是将新打包的exe移到另一个文件夹中,则会显示在

我正在使用为我的node js应用程序创建一个可执行文件。这很有效。但是,我还使用基于环境加载yaml配置文件。当使用pkg打包应用程序时,我指定应该包括config文件夹

  "pkg": {
    "assets": [
      "config/*"
    ]
  }
当我运行
pkg时--调试
,我可以看到配置文件正在打包。但是,如果我随后重命名配置文件夹,删除该文件夹,或者只是将新打包的exe移到另一个文件夹中,则会显示
在配置目录C:\Users\me\folderwithexe\config中找不到任何配置(此配置目录不存在,因为我将exe移到了一个新文件夹)

据我所知,
config
模块似乎正在查找与exe执行位置相关的配置文件夹。它不会从打包的exe文件中获取它,即使它在那里。因此,如果您要在另一台计算机上运行此exe(这是计划),那么它将在exe之外查找配置文件夹。其他模块似乎都没有此问题。只是这个配置模块

你知道如何让
pkg
模块和
config
模块协同工作吗

这是我的完整
包。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 dependency每个资产或脚本。因此,首先需要将配置文件远离pkg

要使pkg远离配置文件,可以使用pkg无法解析的变量路径,例如:

const config = require(path.join(__dirname, 'config/config.json'));
此时,pkg不会捆绑您的配置文件,但是如果您运行构建,您会注意到config.json的路径类似于
/snapshot/config/config.json
()

另一种方法是使用
进程从二进制路径获取配置文件。execPath

const config = require(path.join(process.execPath, "../","./config/config.json"));
之后,可执行文件将从运行目录的“相对路径”获取配置文件

我不使用配置模块进行测试,但我认为如果您从
package.json
的pkg属性中删除
资产:[“config/*”]
,并将新路径添加到配置模块(如上所示),它就会工作

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