我已经创建了一个功能齐全的基本JavaScript Node.js Express API应用程序,我希望将其作为Windows环境中的可执行文件运行。我想这样做,这样我就可以使客户端能够在不将我的源代码暴露给他们的前提下运行我的API。
当前,我一直在使用pkg npm package,它使我可以将node.js应用程序打包到一个可执行文件中,该可执行文件将包含运行该应用程序所需的一切,包括节点和捆绑的源代码。
我的可执行文件可以运行,但是我的POST路由中断,并显示以下错误:
"name": "RequestError",
"message": "Error: form-data: File or directory 'C:\\**\\myapp-api\\uploads\\1553103249524_test.wav' was not included into executable at compilation stage. Please recompile adding it as asset or script.",
"cause": {
"errno": -4058,
"code": "ENOENT",
"path": "C:\\snapshot\\myapp-api\\uploads\\test.wav",
"pkg": true
},
"error": {
"errno": -4058,
"code": "ENOENT",
"path": "C:\\snapshot\\myapp-api\\uploads\\1553103249524_test.wav",
"pkg": true
},
我的POST允许客户端使用multer.js分段上传文件到另一个外部API,该API将返回一些元数据。 pkg.js似乎不具有发现捆绑可执行文件后包含的文件的方法。
在我的配置中我可以做些什么来包括上载的文件吗?还有其他人用来创建其node.js表达API可执行文件的其他实用程序或过程,可以更好地解决我遇到的问题吗?
任何指导都将非常棒。
答案 0 :(得分:1)
尝试在package.json文件的“资产”下添加文件。
pkg网站https://www.npmjs.com/package/pkg#config上的config段落指出:
因此,您必须在package.json文件的pkg属性中手动指定文件-脚本和资产。
"pkg": {
"scripts": "build/**/*.js",
"assets": "views/**/*"
}
您还可以指定全局数组:
"assets": [ "assets/**/*", "images/**/*" ]
只需确保调用pkg package.json或pkg即可。利用脚本和资产条目。
答案 1 :(得分:0)
您可能在脚本中使用了类似的东西(我猜是因为您没有提供这部分代码)
app.use(express.static(__dirname+'/uploads'));
res.sendFile(path.join(__dirname+'/uploads'));
__ dirname在打包您的.exe到处删除它并替换为./
时将是错误的app.use(express.static('./uploads'));
res.sendFile(path.join('./uploads'));
类似的东西。它对我有用。
祝你好运!