如何在electron中集成npm或者说node

如何在electron中集成npm或者说node

主要会执行命令行调用npm install 和 run
而用户的电脑不一定会有Node环境
所以想集成进去
目前有下载好Node文件放进去,调用execFile
以及一切Node执行命令的API都试过
都是开发环境无任何问题 打包后(并且删掉本地的node模拟无node环境)就不行
请各位大佬指点

阅读 11.4k
6 个回答

你需要的是使用npm的能力。
npm本身属于nodejs的一个模块,所以你问题其实可以分成两个来问。

1,如何在客户机上静默安装nodejs并设置好相应的环境变量。
2,如何以编程方式启动npm

第一种方式跟平台紧密相关,实现以及后续维护都比较繁琐,好处是有一个完整独立的nodejs环境。
因为electron自身集成了nodejs,让第二种方法成为可能。

给你一个简单的例子
首先在你electron项目中本地安装npm

npm install npm

之后就可以在业务代码中像普通模块一样使用npm

const { writeFileSync, mkdirSync, existsSync } = require("fs");
const { resolve } = require("path");
const npm = require("npm");
const { homedir } = require("os");

// 建立一个目标文件夹, 并切换到此路径
const dest = resolve(homedir(), "test");
if (!existsSync(dest)) mkdirSync(dest);
process.chdir(dest);

// 写入package.json
writeFileSync(
  resolve(dest, "package.json"),
  JSON.stringify({
    scripts: {
      test: "echo hello npm",
    },
  })
);

npm.load({}, (err) => {
  // npm run
  npm.run("test");

  // npm install
  npm.commands.install(["typescript"], (err) => {
    console.log(err || "done");
  });
});

这个很常见的问题,普通方式开发的软件也会有环境依赖的问题,一般这种是通过NSIS这类封装工具对我们的原始安装包进行二次包装、压缩,这个过程中就可以手动加入nodejs到软件目录下,然后安装时把安装目录下的nodejs指向系统的环境变量,这样就可以全局执行node的各种操作了。重要是的NSIS这类工具还可以对安装包做进一步压缩,减少体积,这对Electron不招人待见的体积控制来说,是个福利啊。

最近也是做了一个纯本地的应用,后端没有打包,只打了前端,在启动软件时用node启动后端服务,关闭软件时结束node进程。

electron自带node环境,配置的时候允许注入就行了

new BrowserWindow({
    width: 1920,
    height: 1080,
    backgroundColor: '#fff',
    webPreferences: {
      nodeIntegration: true
    }
  })
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏