Appearance
nodejs api
在 preload.js
中,我们可以引入 nodejs
的 api,以及少量被限制的 electron
的 api。
模块引入
preload.js
遵循 CommonJS
规范,因此我们可以通过 require
引入 nodejs
的 api。
可以引入的 api 包括 nodejs (基于 nodejs@16) 所有的内置模块,开发者自己编写的 nodejs 模块,以及第三方 nodejs 模块。
js
const writeText = require("./libs/writeText.js");
window.services = {
writeText,
};
js
const fs = require("fs");
const path = require("path");
module.exports = function writeText(text, filePath) {
const dir = path.dirname(filePath);
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
fs.writeFileSync(filePath, text);
return true;
}
return false;
};
第三方模块
当你需要使用第三方模块时,为了保证审核的通过率,请尽量保证直接使用第三方模块的源代码,而不是使用第三方模块的打包版本。
通过 npm
安装
在 preload.js
同级目录下,保证存在一个独立的 package.json
,并且设置 type
为 commons
。
json
{
"type": "commonjs"
"dependencies": {}
}
在 preload.js
同级目录下,执行 npm install
安装第三方模块,保证 node_modules
目录存在。
bash
npm install colord
js
const { getFormat, colord } = require("colord");
// ...其他代码
window.exports = {
darken: {
mode: "list",
args: {
search(_, text, setList) {
const fmt = getFormat(text);
if (!fmt) {
setList([
{
title: "无效的颜色",
description: "请输入一个有效的颜色值,比如 #000 或 rgb(0,0,0)",
},
]);
} else {
const darkColor = colord(text).darken(0.1);
setList([
{
title: "变暗10%",
description: darkColor,
},
]);
}
},
//...其他代码
},
},
};
通过源码引入
在 preload.js
同级目录下,下载源码,并使用 require
引入。
比如从 github
下载 nodemailer
:
bash
git clone https://github.com/nodemailer/nodemailer.git
js
const nodemailer = require("./nodemailer");
const _setImmediate = setImmediate;
process.once("loaded", function () {
global.setImmediate = _setImmediate;
});
const sendMail = () => {
let transporter = require("./nodemailer").createTransport({
host: "smtp.qq.com",
port: 465,
secure: true,
auth: {
user: "aaa@qq.com",
pass: "xxx",
},
});
let mailOptions = {
from: "aaa@qq.com",
to: "bbb@gmail.com",
subject: "Sending Email using Node.js",
text: "That was easy!",
};
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
} else {
console.log("Email sent: " + info.response);
}
});
};
window.services = {
sendMail: () => {
return sendMail();
},
};
tsx
export default function App() {
return <button onClick={() => window.services.sendMail()}>发送邮件</button>;
}
Electron API
编写 preload.js
并使用 CommonJs 的方式引入 electron 的 api
获取更多 electron 的能力请查阅: electron 官方 API 文档