quasar + vite + electron 程序启动时自动运行node脚本

使用 quasar + vite 编写electron应用程序,同时用node编写的server后台,想在程序启动时自动运行后台服务。打包之后,代码都被编译,我目前没找到是否有什么办法可以像vue的 assets文件夹一样的办法,可以打包的时候原封不动的打包到根目录,所以后台代码需要打完包粘贴到根目录(也算是曲线救国)。server文件夹为后台代码,以下为打完包的项目结构。

现在来说说前台如何实现。首先需要在主线程里编辑,使用exec执行脚本。

代码如下:

// // 在Electron主进程文件中
const { exec } = require('child_process');
 
function runNodeScript(scriptPath) {
  console.log(scriptPath, 'scriptPath');
  exec('node ' + scriptPath, (error, stdout, stderr) => {
    console.log('exec', error, stdout, stderr);
    if (error) {
      console.log(`执行出错: ${error}`);
      return;
    }
    console.log(`stdout: ${stdout}`);
    if (stderr) {
      console.log(`stderr: ${stderr}`);
    }
  });
}
 
// 假设你的Node脚本路径是'./your-node-script.js'
runNodeScript(__dirname.split('\\').slice(0, -2).join('\\') + '\\server\\server.js');

本以为完事大吉了,打完包之后打开程序,发现主线程没报错,但是服务也无法访问,想着可能是后台脚本的问题,我进入server文件夹,打开cmd 输入 node server.js ,此时后台端口可以访问了,所以并不是后台代码的问题。

最后发现是exec执行的脚本 和 在文件夹下 node 执行的脚本 环境变量会不同,所以导致这个问题。对exec 进行环境变量配置:

代码如下:

// // 在Electron主进程文件中
const { exec } = require('child_process');
 
const options = {
  cwd: __dirname.split('\\').slice(0, -2).join('\\') + '\\server',
  env: {
    NODE_ENV: 'production',
    DATABASE_URL: 'your-database-url',
    // 其他环境变量
  }
};
function runNodeScript(scriptPath) {
  console.log(scriptPath, 'scriptPath');
  exec('node ' + scriptPath, options, (error, stdout, stderr) => {
    console.log('exec', error, stdout, stderr);
    if (error) {
      console.log(`执行出错: ${error}`);
      return;
    }
    console.log(`stdout: ${stdout}`);
    if (stderr) {
      console.log(`stderr: ${stderr}`);
    }
  });
}
 
// 假设你的Node脚本路径是'./your-node-script.js'
runNodeScript(__dirname.split('\\').slice(0, -2).join('\\') + '\\server\\server.js');

此时,在重新打个包,运行项目时,后台已经可以访问了~

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值