diff --git a/electron/.gitignore b/electron/.gitignore index e1eca71d..0a3786d7 100644 --- a/electron/.gitignore +++ b/electron/.gitignore @@ -1,3 +1,8 @@ -node_modules -public +node_modules/ +public/ package-lock.json + +out/ + + +.native diff --git a/native.js b/electron/index.js similarity index 51% rename from native.js rename to electron/index.js index 35e30f45..c9d50910 100644 --- a/native.js +++ b/electron/index.js @@ -1,6 +1,9 @@ const fs = require('fs'); const path = require('path') -const package = require('./package.json') +const inquirer = require('inquirer'); +const child_process = require('child_process'); +const config = require('./package.json') +const argv = process.argv; // 删除 function deleteFile(path) { @@ -82,11 +85,45 @@ function copyDir(srcDir, tarDir, cb) { } } +// 给地址加上前后 +function formatUrl(str) { + let url; + if (str.substring(0, 7) === "http://" || + str.substring(0, 8) === "https://") { + url = str.trim(); + } else { + url = "http://" + str.trim(); + } + if (url.substring(url.length - 1) != "/") { + url+= "/" + } + return url; +} + +// 运行命令 +function exec(command, quiet) { + return new Promise((resolve, reject) => { + try { + let child = child_process.exec(command, {encoding: 'utf8'}, () => { + resolve(); + }); + if (!quiet) { + child.stdout.pipe(process.stdout); + } + child.stderr.pipe(process.stderr); + } catch (e) { + console.error('execute command failed :', command); + reject(e); + } + }) +} + /** ***************************************************************************************************/ /** ***************************************************************************************************/ /** ***************************************************************************************************/ -const electronDir = path.resolve("electron/public"); +const electronDir = path.resolve(__dirname, "public"); +const nativeCachePath = path.resolve(__dirname, ".native"); if (fs.existsSync(electronDir)) { deleteFile(electronDir); } @@ -98,14 +135,62 @@ fs.mkdirSync(electronDir); 'images', 'js', ].forEach(function (item) { - copyDir(path.resolve("public/" + item), electronDir + "/" + item) + copyDir(path.resolve(__dirname, "../public", item), electronDir + "/" + item) }) -copyFile(path.resolve("electron/index.html"), electronDir + "/index.html") +copyFile(path.resolve(__dirname, "index.html"), electronDir + "/index.html") + + +const questions = [ + { + type: 'input', + name: 'targetUrl', + message: "请输入网站地址", + default: () => { + if (fs.existsSync(nativeCachePath)) { + return fs.readFileSync(nativeCachePath, 'utf8'); + } + return undefined; + }, + validate: function (value) { + return value !== '' + } + }, { + type: 'list', + name: 'platform', + message: "选择操作系统平台", + choices: [{ + name: "MacOS Intel", + value: { + platform: 'mac', + arch: 'x64', + } + }, { + name: "MacOS Arm64", + value: { + platform: 'mac', + arch: 'arm64', + } + }, { + name: "Window x86_64", + value: { + platform: 'windows', + arch: 'x64', + } + }] + } +]; + +inquirer.prompt(questions).then(answers => { + let data = `window.systemInformation = { + version: "${config.version}", + origin: "./", + apiUrl: "${formatUrl(answers.targetUrl)}api/" + }`; + fs.writeFileSync(nativeCachePath, formatUrl(answers.targetUrl)); + fs.writeFileSync(electronDir + "/config.js", data, 'utf8'); + exec("cd electron && npm run " + (argv[2] || "start")).then(r => {}) +}); + -fs.writeFileSync(electronDir + "/config.js", `window.systemInformation = { - version: "${package.version}", - origin: "./", - apiUrl: "http://127.0.0.1:2222/api/" -}`, 'utf8'); diff --git a/electron/package.json b/electron/package.json index 5ee875ec..7b419d6a 100644 --- a/electron/package.json +++ b/electron/package.json @@ -1,13 +1,50 @@ { - "name": "DooTask-App", - "version": "1.0.0", - "description": "DooTask is task management system.", - "main": "main.js", - "license": "MIT", - "scripts": { - "start": "electron ." - }, - "devDependencies": { - "electron": "^13.1.6" + "name": "DooTask-App", + "version": "1.0.0", + "description": "DooTask is task management system.", + "main": "main.js", + "license": "MIT", + "scripts": { + "start": "electron-forge start", + "package": "electron-forge package", + "make": "electron-forge make" + }, + "devDependencies": { + "@electron-forge/cli": "^6.0.0-beta.57", + "@electron-forge/maker-deb": "^6.0.0-beta.57", + "@electron-forge/maker-rpm": "^6.0.0-beta.57", + "@electron-forge/maker-squirrel": "^6.0.0-beta.57", + "@electron-forge/maker-zip": "^6.0.0-beta.57", + "electron": "^13.1.6" + }, + "dependencies": { + "electron-squirrel-startup": "^1.0.0" + }, + "config": { + "forge": { + "packagerConfig": {}, + "makers": [ + { + "name": "@electron-forge/maker-squirrel", + "config": { + "name": "DooTask_App" + } + }, + { + "name": "@electron-forge/maker-zip", + "platforms": [ + "darwin" + ] + }, + { + "name": "@electron-forge/maker-deb", + "config": {} + }, + { + "name": "@electron-forge/maker-rpm", + "config": {} + } + ] } + } } diff --git a/package.json b/package.json index 525316f2..a6a0c52b 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "prod": "npm run production", "production": "mix --production", "version": "node ./version.js", - "native": "node ./native.js" + "electron-start": "node ./electron/index.js start", + "electron-make": "node ./electron/index.js make" }, "devDependencies": { "axios": "^0.21",