diff --git a/package-lock.json b/package-lock.json index 0e51dac..bd7114c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1343,7 +1343,7 @@ }, "@types/node": { "version": "15.14.3", - "resolved": "https://registry.nlark.com/@types/node/download/@types/node-15.14.3.tgz?cache=0&sync_timestamp=1627257813519&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-15.14.3.tgz", + "resolved": "https://registry.nlark.com/@types/node/download/@types/node-15.14.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-15.14.3.tgz", "integrity": "sha1-MwdjuXPQrKy3/czHWU4fsoHtGxw=", "dev": true }, @@ -1602,6 +1602,12 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.nlark.com/async/download/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", @@ -1831,6 +1837,16 @@ } } }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-4.1.2.tgz?cache=0&sync_timestamp=1606867297052&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-4.1.2.tgz", + "integrity": "sha1-lygHKpVPgFIoIlpt7qazhGHhvVo=", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "camelcase": { "version": "2.1.1", "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz?cache=0&sync_timestamp=1603923709404&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-2.1.1.tgz", @@ -1915,6 +1931,15 @@ "resolved": "https://registry.npm.taobao.org/classnames/download/classnames-2.3.1.tgz?cache=0&sync_timestamp=1617400318265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclassnames%2Fdownload%2Fclassnames-2.3.1.tgz", "integrity": "sha1-38+jiR4wbsHa0QXQ6I9EF7hTXo4=" }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.nlark.com/clean-css/download/clean-css-4.2.3.tgz", + "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz", @@ -2173,6 +2198,15 @@ "integrity": "sha1-wdfo8eX2z8n/ZfnNNS03NIdWwzM=", "dev": true }, + "cross-env": { + "version": "7.0.3", + "resolved": "https://registry.nlark.com/cross-env/download/cross-env-7.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcross-env%2Fdownload%2Fcross-env-7.0.3.tgz", + "integrity": "sha1-hlJkspZ33AFbqEGJGJZd0jL8VM8=", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.nlark.com/cross-spawn/download/cross-spawn-7.0.3.tgz", @@ -2354,6 +2388,16 @@ "integrity": "sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0=", "dev": true }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/dot-case/download/dot-case-3.0.4.tgz", + "integrity": "sha1-mytnDQCkMWZ6inW6Kc0bmICc51E=", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "dotenv": { "version": "10.0.0", "resolved": "https://registry.nlark.com/dotenv/download/dotenv-10.0.0.tgz?cache=0&sync_timestamp=1621627076012&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdotenv%2Fdownload%2Fdotenv-10.0.0.tgz", @@ -2376,6 +2420,15 @@ "safer-buffer": "^2.1.0" } }, + "ejs": { + "version": "3.1.6", + "resolved": "https://registry.npm.taobao.org/ejs/download/ejs-3.1.6.tgz", + "integrity": "sha1-W/0KBol0O7UmizVQzO7rvBcCgio=", + "dev": true, + "requires": { + "jake": "^10.6.1" + } + }, "electron": { "version": "13.1.7", "resolved": "https://registry.nlark.com/electron/download/electron-13.1.7.tgz", @@ -3387,6 +3440,15 @@ } } }, + "filelist": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/filelist/download/filelist-1.0.2.tgz", + "integrity": "sha1-gCAvIUYtTRwuIUEZsYB8G8A4Dls=", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npm.taobao.org/filename-reserved-regex/download/filename-reserved-regex-2.0.0.tgz", @@ -3869,6 +3931,12 @@ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", + "dev": true + }, "history": { "version": "4.10.1", "resolved": "https://registry.nlark.com/history/download/history-4.10.1.tgz", @@ -3905,6 +3973,21 @@ "integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=", "dev": true }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/html-minifier-terser/download/html-minifier-terser-5.1.1.tgz", + "integrity": "sha1-ki6W8fO7YIMsJjS3mIQJY4mx8FQ=", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + } + }, "html-parse-stringify": { "version": "3.0.1", "resolved": "https://registry.nlark.com/html-parse-stringify/download/html-parse-stringify-3.0.1.tgz", @@ -4241,6 +4324,76 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, + "jake": { + "version": "10.8.2", + "resolved": "https://registry.npm.taobao.org/jake/download/jake-10.8.2.tgz?cache=0&sync_timestamp=1591684013969&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjake%2Fdownload%2Fjake-10.8.2.tgz", + "integrity": "sha1-68nehVgWCmbYLQ6txqLlj7xQCns=", + "dev": true, + "requires": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1618995367379&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&sync_timestamp=1618677243201&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.nlark.com/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "jiti": { "version": "1.10.1", "resolved": "https://registry.nlark.com/jiti/download/jiti-1.10.1.tgz", @@ -4465,6 +4618,15 @@ "signal-exit": "^3.0.0" } }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-2.0.2.tgz?cache=0&sync_timestamp=1606867333511&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flower-case%2Fdownload%2Flower-case-2.0.2.tgz", + "integrity": "sha1-b6I3xj29xKgsoP2ILkci3F5jTig=", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz", @@ -4791,6 +4953,16 @@ "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", "dev": true }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.nlark.com/no-case/download/no-case-3.0.4.tgz", + "integrity": "sha1-02H9XJgA9VhVGoNp/A3NRmK2Ek0=", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node-abi": { "version": "2.30.0", "resolved": "https://registry.nlark.com/node-abi/download/node-abi-2.30.0.tgz", @@ -5190,6 +5362,16 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/param-case/download/param-case-3.0.4.tgz?cache=0&sync_timestamp=1606867292797&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparam-case%2Fdownload%2Fparam-case-3.0.4.tgz", + "integrity": "sha1-fRf+SqEr3jTUp32RrPtiGcqtAcU=", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "parse-author": { "version": "2.0.0", "resolved": "https://registry.npm.taobao.org/parse-author/download/parse-author-2.0.0.tgz", @@ -5220,6 +5402,16 @@ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.nlark.com/pascal-case/download/pascal-case-3.1.2.tgz", + "integrity": "sha1-tI4O8rmOIF58Ha50fQsVCCN2YOs=", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz", @@ -5707,6 +5899,12 @@ "resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz?cache=0&sync_timestamp=1626993001371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.9.tgz", "integrity": "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I=" }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.nlark.com/relateurl/download/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, "repeating": { "version": "2.0.1", "resolved": "https://registry.nlark.com/repeating/download/repeating-2.0.1.tgz", @@ -6345,6 +6543,25 @@ } } }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.nlark.com/terser/download/terser-4.8.0.tgz", + "integrity": "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.nlark.com/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1624609539421&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz", + "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=", + "dev": true + } + } + }, "throttleit": { "version": "0.0.2", "resolved": "https://registry.npm.taobao.org/throttleit/download/throttleit-0.0.2.tgz", @@ -6760,7 +6977,7 @@ }, "vite": { "version": "2.4.3", - "resolved": "https://registry.nlark.com/vite/download/vite-2.4.3.tgz", + "resolved": "https://registry.nlark.com/vite/download/vite-2.4.3.tgz?cache=0&sync_timestamp=1626783291368&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvite%2Fdownload%2Fvite-2.4.3.tgz", "integrity": "sha1-/kqnjp3X02vLEuzL1SMTsmz633c=", "requires": { "esbuild": "^0.12.8", @@ -6770,6 +6987,47 @@ "rollup": "^2.38.5" } }, + "vite-plugin-html": { + "version": "2.0.7", + "resolved": "https://registry.npm.taobao.org/vite-plugin-html/download/vite-plugin-html-2.0.7.tgz", + "integrity": "sha1-VROf+KhDujs9XNSGEMpvav33wj0=", + "dev": true, + "requires": { + "ejs": "^3.1.6", + "fs-extra": "^9.1.0", + "html-minifier-terser": "^5.1.1" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.nlark.com/fs-extra/download/fs-extra-9.1.0.tgz", + "integrity": "sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0=", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-6.1.0.tgz?cache=0&sync_timestamp=1604161797011&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-6.1.0.tgz", + "integrity": "sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-2.0.0.tgz?cache=0&sync_timestamp=1603179967633&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-2.0.0.tgz", + "integrity": "sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc=", + "dev": true + } + } + }, "vite-plugin-windicss": { "version": "1.2.5", "resolved": "https://registry.nlark.com/vite-plugin-windicss/download/vite-plugin-windicss-1.2.5.tgz", diff --git a/package.json b/package.json index baf6ca7..408b83c 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,11 @@ "description": "description", "main": "dist/electron/entry.js", "scripts": { - "dev": "ts-node -r tsconfig-paths/register script/dev-runner --env=development --watch", + "dev": "node script/run --command=ts-node -r tsconfig-paths/register script/dev-runner --watch", "build": "ts-node -r tsconfig-paths/register script/build --env=production && npm run package", - - "devaa": "npm run dev:all", "dev:all": "concurrently -n=vue,ele -c=green,blue \"npm run dev:vue\" \"npm run dev:ele\"", - "dev:vue": "vite", + "dev:vue": "node script/before", "dev:ele": "node -r ts-node/register script/build-main --env=development --watch", "dev:test": "electron-forge start --inspect-electron", "package": "electron-forge package", @@ -37,11 +35,13 @@ "cfonts": "^2.9.3", "chalk": "^4.1.1", "concurrently": "^6.2.0", + "cross-env": "^7.0.3", "dotenv": "^10.0.0", "electron": "^13.1.7", "execa": "^5.1.1", "ts-node": "^10.1.0", "tsconfig-paths": "^3.10.1", + "vite-plugin-html": "^2.0.7", "vitejs-plugin-electron": "^0.1.3" }, "dependencies": { diff --git a/script/aa.js b/script/aa.js deleted file mode 100644 index 0edd945..0000000 --- a/script/aa.js +++ /dev/null @@ -1,158 +0,0 @@ -// @ts-nocheck -const electron = require("electron") -const execa = require("execa") -const vite = require("vite") -const path = require("path") -const fs = require("fs") -const os = require("os") -const esbuild = require("esbuild") -const { say } = require("cfonts") -const { spawn } = require("child_process") -const chalk = require("chalk") - -function getEnvScript () { - let script = `process.env={...process.env};` - script += `process.env.RES_DIR = require("path").join(require("path").dirname(process.execPath),"resources/resource/release")` - return script -} - -async function buildRender() { - const subprocess = execa("vite",['-c','vite.config.ts']).stdout.pipe(process.stdout);; - setTimeout(() => { - subprocess.killed(); - }, 1000); - - try { - await subprocess; - } catch (error) { - console.log(subprocess.killed); // true - console.log(error.isCanceled); // true - } - return - let options = { - root: path.join(__dirname, "../src/render"), - enableEsbuild: true, - minify: false, - resolve:{ - alias: [ - { find: "@", replacement: path.resolve(__dirname, "src/render") }, - { find: "@render", replacement: path.resolve(__dirname, "src/render") }, - { find: "@main", replacement: path.resolve(__dirname, "src/main") }, - { find: "@src", replacement: path.resolve(__dirname, "src/src") }, - { find: "@root", replacement: __dirname }, - ], - }, - optimizeDeps: { - exclude: ["process"], - }, - } - await vite.build(options) - // let htmlPath = path.join(__dirname, "../dist/electron", "index.html") - // let html = fs.readFileSync(htmlPath, { encoding: "utf8" }) - // html = html.replace("", ``) - // fs.writeFileSync(htmlPath, html) -} - -function buildMain() { - let outfile = path.join(process.cwd(), "dist/electron/entry.js") - let entryFilePath = path.join(process.cwd(), "src/main/index.js") - esbuild.buildSync({ - entryPoints: [entryFilePath], - outfile, - minify: false, - bundle: true, - platform: "node", - sourcemap: false, - external: ["electron"], - }) - let js = `${getEnvScript()}${os.EOL}${fs.readFileSync(outfile)}` - fs.writeFileSync(outfile, js) -} - -function startElectron() { - var args = ["--inspect=5858", path.join(__dirname, "../dist/electron/main.js")] - - // detect yarn or npm and process commandline args accordingly - if (process.env.npm_execpath.endsWith("yarn.js")) { - args = args.concat(process.argv.slice(3)) - } else if (process.env.npm_execpath.endsWith("npm-cli.js")) { - args = args.concat(process.argv.slice(2)) - } - - // electronProcess = spawn(electron, args) - - // electronProcess.stdout.on("data", data => { - // electronLog(data, "blue") - // }) - // electronProcess.stderr.on("data", data => { - // electronLog(data, "red") - // }) - - // electronProcess.on("close", () => { - // if (!manualRestart) process.exit() - // }) -} - -function logStats(proc, data) { - let log = "" - - log += chalk.yellow.bold(`┏ ${proc} Process ${new Array(19 - proc.length + 1).join("-")}`) - log += "\n\n" - - if (typeof data === "object") { - data - .toString({ - colors: true, - chunks: false, - }) - .split(/\r?\n/) - .forEach(line => { - log += " " + line + "\n" - }) - } else { - log += ` ${data}\n` - } - - log += "\n" + chalk.yellow.bold(`┗ ${new Array(28 + 1).join("-")}`) + "\n" - - console.log(log) -} - -function electronLog(data, color) { - let log = "" - data = data.toString().split(/\r?\n/) - data.forEach(line => { - log += ` ${line}\n` - }) - if (/[0-9A-z]+/.test(log)) { - console.log( - chalk[color].bold("┏ Electron -------------------") + "\n\n" + log + chalk[color].bold("┗ ----------------------------") + "\n" - ) - } -} - -function greeting() { - const cols = process.stdout.columns - let text = "" - - if (cols > 104) text = "electron-vue" - else if (cols > 76) text = "electron-|vue" - else text = '' - - if (text) { - say(text, { - colors: ["yellow"], - font: "simple3d", - space: false, - }) - } else console.log(chalk.yellow.bold("\n electron-vue")) - console.log(chalk.blue(" getting ready...") + "\n") -} - -function init() { - greeting() - // buildMain() - buildRender() -} - -init() diff --git a/script/build.ts b/script/build.ts index ff0fa09..573394c 100644 --- a/script/build.ts +++ b/script/build.ts @@ -3,97 +3,21 @@ import { main } from "../package.json" import { join } from "path" import * as electron from "electron" -import * as dotenv from "dotenv" import * as ora from "ora" import * as chalk from "chalk" import * as minimist from "minimist" +import { buildVite } from "./code/runVite" +import { buildElectron } from "./code/runElectron" +import { buildMain, tscCheck } from "./code/runCommon" + import { exec, spawn, ChildProcess } from "child_process" import { watch, rollup, OutputOptions } from "rollup" import { waitOn } from "./utils" import options from "./rollup.config" -// 注入环境变量 -dotenv.config({ path: join(__dirname, "../.env") }) -// 解析命令行参数 -const argv = minimist(process.argv.slice(2)) -// rollup配置 -const opts = options(argv.env) -const TAG = "[build-main.ts]" // 加载图 const spinner = ora(`${TAG} Electron build...`) -function buildVite() { - return new Promise((resolve, reject) => { - let viteProcess = spawn("node", [join(__dirname, "../node_modules/vite/bin/vite.js"), "build"], { - stdio: "pipe", - env: Object.assign(process.env, { NODE_ENV: argv.env }), - }) - if (viteProcess) { - viteProcess.stdout.on("end", data => { - console.log(`\n[vite build end]`) - resolve(viteProcess) - }) - viteProcess.stderr.on("data", data => { - console.error(`\n[vite build err]: ${data}`) - reject() - }) - } else { - reject() - } - }) -} -function tscCheck() { - return new Promise((resolve, reject) => { - let tscProcess = spawn("node", [join(__dirname, "../node_modules/typescript/bin/tsc")], { - stdio: "pipe", - env: Object.assign(process.env, { NODE_ENV: argv.env }), - }) - if (tscProcess) { - tscProcess.stdout.on("end", data => { - console.log(`[tsc check end]`) - resolve(tscProcess) - }) - tscProcess.stderr.on("data", data => { - console.error(`[tsc check err]: ${data}`) - reject() - }) - } else { - reject() - } - }) -} -async function buildMain() { - try { - const build = await rollup(opts) - build.write(opts.output as OutputOptions) - } catch (error) { - console.log(`\n${TAG} ${chalk.red("构建报错")}\n`, error, "\n") - } -} - -function buildElectron() { - return new Promise((resolve, reject) => { - let tscProcess = spawn("node", [join(__dirname, "../node_modules/@electron-forge/cli/dist/electron-forge.js"), "make"], { - stdio: "pipe", - env: Object.assign(process.env, { NODE_ENV: argv.env }), - }) - if (tscProcess) { - tscProcess.stdout.on("data", data => { - console.log(`[electron build]: ${data}`) - }) - tscProcess.stdout.on("end", data => { - console.log(`[electron build end]`) - resolve(tscProcess) - }) - tscProcess.stderr.on("data", data => { - console.error(`[electron build err]: ${data}`) - reject() - }) - } else { - reject() - } - }) -} ;(async () => { await tscCheck() await buildVite() diff --git a/script/code/runCommon.ts b/script/code/runCommon.ts new file mode 100644 index 0000000..74f0166 --- /dev/null +++ b/script/code/runCommon.ts @@ -0,0 +1,36 @@ +// @ts-nocheck +import { spawn } from "child_process" +import { join } from "path" +import { rollup, OutputOptions } from "rollup" +import * as chalk from "chalk" +import options from "../rollup.config" + +export function tscCheck() { + return new Promise((resolve, reject) => { + let tscProcess = spawn("node", [join(__dirname, "../../node_modules/typescript/bin/tsc")], { + stdio: "pipe", + // env: Object.assign(process.env, { NODE_ENV: argv.env }), + }) + if (tscProcess) { + tscProcess.stdout.on("end", data => { + console.log(`[tsc check end]`) + resolve(tscProcess) + }) + tscProcess.stderr.on("data", data => { + console.error(`[tsc check err]: ${data}`) + reject() + }) + } else { + reject() + } + }) +} +export async function buildMain() { + try { + const opts = options(process.env.NODE_ENV) + const build = await rollup(opts) + build.write(opts.output as OutputOptions) + } catch (error) { + console.log(`\n${"[build-main.ts]"} ${chalk.red("构建报错")}\n`, error, "\n") + } +} diff --git a/script/code/runElectron.ts b/script/code/runElectron.ts new file mode 100644 index 0000000..5819619 --- /dev/null +++ b/script/code/runElectron.ts @@ -0,0 +1,47 @@ +// @ts-nocheck +import { exec, spawn, ChildProcess } from "child_process" +import { join } from "path" +import * as electron from "electron" +import { main } from "../../package.json" + +export function devElectron() { + return new Promise((resolve, reject) => { + let electronProcess = spawn(electron as unknown as string, ['--inspect=5858',join(__dirname, `../../${main}`)], { + stdio: "pipe", + // env: Object.assign(process.env, { NODE_ENV: argv.env }), + }) + if (electronProcess) { + electronProcess.stdout.on("data", data => { + console.log(`${data}`) + }) + resolve(electronProcess) + } else { + reject() + } + }) +} + + +export function buildElectron() { + return new Promise((resolve, reject) => { + let tscProcess = spawn("node", [join(__dirname, "../../node_modules/@electron-forge/cli/dist/electron-forge.js"), "package"], { + stdio: "pipe", + // env: Object.assign(process.env, { NODE_ENV: argv.env }), + }) + if (tscProcess) { + tscProcess.stdout.on("data", data => { + console.log(`[electron build]: ${data}`) + }) + tscProcess.stdout.on("end", data => { + console.log(`[electron build end]`) + resolve(tscProcess) + }) + tscProcess.stderr.on("data", data => { + console.error(`[electron build err]: ${data}`) + reject() + }) + } else { + reject() + } + }) +} diff --git a/script/code/runVite.ts b/script/code/runVite.ts new file mode 100644 index 0000000..a6f9f7a --- /dev/null +++ b/script/code/runVite.ts @@ -0,0 +1,54 @@ +// @ts-nocheck +import { exec, spawn, ChildProcess } from "child_process" +import { join } from "path" + +export function devVite() { + return new Promise((resolve, reject) => { + let viteProcess = spawn("node", [join(__dirname, "../../node_modules/vite/bin/vite.js")], { + stdio: "pipe", + // env: Object.assign(process.env, { NODE_ENV: argv.env }), + }) + if (viteProcess) { + let isReady = false + viteProcess.stdout.on("data", data => { + console.log(`${data}`) + if (!isReady && data.indexOf("ready") != -1) { + resolve(viteProcess) + } + }) + + viteProcess.stderr.on("data", data => { + console.error(`[vite err]: ${data}`) + reject() + }) + + viteProcess.on("close", code => { + console.log(`[vite close]: exited with code ${code}`) + reject() + }) + } else { + reject() + } + }) +} + +export function buildVite() { + return new Promise((resolve, reject) => { + let viteProcess = spawn("node", [join(__dirname, "../../node_modules/vite/bin/vite.js"), "build"], { + stdio: "pipe", + // env: Object.assign(process.env, { NODE_ENV: argv.env }), + }) + if (viteProcess) { + viteProcess.stdout.on("end", data => { + console.log(`\n[vite build end]`) + resolve(viteProcess) + }) + viteProcess.stderr.on("data", data => { + console.error(`\n[vite build err]: ${data}`) + reject() + }) + } else { + reject() + } + }) +} diff --git a/script/dev-runner.ts b/script/dev-runner.ts index 7fd75d5..7bc03a5 100644 --- a/script/dev-runner.ts +++ b/script/dev-runner.ts @@ -1,76 +1,18 @@ // @ts-nocheck - -import { main } from "../package.json" -import { join } from "path" -import * as electron from "electron" -import * as dotenv from "dotenv" -import * as ora from "ora" import * as chalk from "chalk" -import * as minimist from "minimist" +import { devVite } from "./code/runVite" +import { devElectron } from "./code/runElectron" -import { exec, spawn, ChildProcess } from "child_process" -import { watch, rollup, OutputOptions } from "rollup" -import { waitOn } from "./utils" +import { ChildProcess } from "child_process" +import { watch } from "rollup" import options from "./rollup.config" -// 注入环境变量 -dotenv.config({ path: join(__dirname, "../.env") }) -// 解析命令行参数 -const argv = minimist(process.argv.slice(2)) -// rollup配置 -const opts = options(argv.env) -const TAG = "[build-main.ts]" -// 加载图 -const spinner = ora(`${TAG} Electron build...`) -console.log(join(__dirname, "../node_modules/.bin/vite")) - -function runVite() { - return new Promise((resolve, reject) => { - let viteProcess = spawn("node", [`D:/1XYX/pro/vite-electron/node_modules/vite/bin/vite.js`], { - stdio: "pipe", - env: Object.assign(process.env, { NODE_ENV: argv.env }), - }) - if (viteProcess) { - let isReady = false - viteProcess.stdout.on("data", data => { - // console.log(`${data}`) - if (!isReady && data.indexOf("ready") != -1) { - resolve(viteProcess) - } - }) - viteProcess.stderr.on("data", data => { - console.error(`[vite err]: ${data}`) - reject() - }) - - viteProcess.on("close", code => { - console.log(`[vite close]: exited with code ${code}`) - reject() - }) - } else { - reject() - } - }) -} - -function runElectron() { - return new Promise((resolve, reject) => { - let electronProcess = spawn(electron as unknown as string, [join(__dirname, `../${main}`)], { - stdio: "pipe", - env: Object.assign(process.env, { NODE_ENV: argv.env }), - }) - if (electronProcess) { - resolve(electronProcess) - } else { - reject() - } - }) -} +const opts = options(process.env.NODE_ENV) +const TAG = "[build-main.ts]" ;(async () => { - let vitePorcess = await runVite() - console.log('[vite]', chalk.green(`vite ready.`)) - + let vitePorcess = await devVite() + console.log("[vite]", chalk.green(`vite ready.`)) const watcher = watch(opts) let child: ChildProcess | null let manualRestart = false @@ -78,7 +20,7 @@ function runElectron() { const log = chalk.green(`change -- ${filename}`) console.log(TAG, log) }) - watcher.on("event",async ev => { + watcher.on("event", async ev => { if (ev.code === "END") { if (child && child.kill) { manualRestart = true @@ -89,8 +31,8 @@ function runElectron() { }, 5000) } try { - child = await runElectron() - console.log('[electron]', chalk.green(`electron ready.`)) + child = await devElectron() + console.log("[electron]", chalk.green(`electron ready.`)) child.on("close", () => { if (!manualRestart) { vitePorcess.kill() diff --git a/script/log.ts b/script/log.ts new file mode 100644 index 0000000..fed3abc --- /dev/null +++ b/script/log.ts @@ -0,0 +1,58 @@ +const { say } = require("cfonts") +const chalk = require("chalk") + +export function logStats(proc, data) { + let log = "" + + log += chalk.yellow.bold(`┏ ${proc} Process ${new Array(19 - proc.length + 1).join("-")}`) + log += "\n\n" + + if (typeof data === "object") { + data + .toString({ + colors: true, + chunks: false, + }) + .split(/\r?\n/) + .forEach(line => { + log += " " + line + "\n" + }) + } else { + log += ` ${data}\n` + } + + log += "\n" + chalk.yellow.bold(`┗ ${new Array(28 + 1).join("-")}`) + "\n" + + console.log(log) +} + +export function electronLog(data, color) { + let log = "" + data = data.toString().split(/\r?\n/) + data.forEach(line => { + log += ` ${line}\n` + }) + if (/[0-9A-z]+/.test(log)) { + console.log( + chalk[color].bold("┏ Electron -------------------") + "\n\n" + log + chalk[color].bold("┗ ----------------------------") + "\n" + ) + } +} + +export function greeting() { + const cols = process.stdout.columns + let text + + if (cols > 104) text = "electron-vue" + else if (cols > 76) text = "electron-|vue" + else text = false + + if (text) { + say(text, { + colors: ["yellow"], + font: "simple3d", + space: false, + }) + } else console.log(chalk.yellow.bold("\n electron-vue")) + console.log(chalk.blue(" getting ready...") + "\n") +} diff --git a/script/rollup.config.ts b/script/rollup.config.ts index c903796..1d9fe67 100644 --- a/script/rollup.config.ts +++ b/script/rollup.config.ts @@ -9,6 +9,8 @@ const alias = require("@rollup/plugin-alias") const {nodeResolve} = require("@rollup/plugin-node-resolve") export default (env = "production") => { + console.log(env); + const options: RollupOptions = { input: join(__dirname, "../src/main/index.ts"), output: { diff --git a/script/run.js b/script/run.js new file mode 100644 index 0000000..37e7810 --- /dev/null +++ b/script/run.js @@ -0,0 +1,8 @@ +const crossEnv = require("cross-env") + +crossEnv([ + "NO=123", + "PORT=3344", + "NODE_ENV=development", + "ts-node -r tsconfig-paths/register script/dev-runner --watch" +]) diff --git a/src/main/index.ts b/src/main/index.ts index 2879d8e..d8ed3dc 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -2,12 +2,26 @@ * electron 主文件 */ import "@src/common/patch" -import * as dotenv from "dotenv" +import Shared from "../share" const { join } = require("path") -dotenv.config({ path: join(__dirname, "../../.env") }) const { app, BrowserWindow } = require("electron") -let win +Shared.data = { + mainWindow: null, + floatWindow: null, + miniWindow: null, + forceClose: false, +} + +let isDev = process.env.NODE_ENV == "development" ? true : false + +if (!isDev) { + global.__static = require('path') + .join(__dirname, '/resource') + .replace(/\\/g, '\\\\') +} + +let win; function createWin() { // 创建浏览器窗口dsa @@ -17,13 +31,13 @@ function createWin() { webPreferences: { nodeIntegration: true, contextIsolation: false, - preload: join(__dirname, "../../src/preload/index.js"), + // preload: join(__dirname, "../../src/preload/index.js"), }, }) const URL = app.isPackaged ? `file://${join(__dirname, "./index.html")}` // vite 构建后的静态文件地址 - : `http://localhost:${process.env.PORT}/#/login` // vite 启动的服务器地址 + : `http://localhost:${process.env.PORT}/#/` // vite 启动的服务器地址 win?.loadURL(URL) } diff --git a/src/render/index.html b/src/render/index.html index 8fc452c..35c67c0 100644 --- a/src/render/index.html +++ b/src/render/index.html @@ -6,10 +6,11 @@ - Vite App + <%- title %>
+ diff --git a/src/render/views/Login/index.tsx b/src/render/views/Login/index.tsx index e8a47e1..de93f4d 100644 --- a/src/render/views/Login/index.tsx +++ b/src/render/views/Login/index.tsx @@ -28,7 +28,7 @@ export default function Login(props: any) {
-

{t('home')}

+

{t('home')}阿松大

{usename}

{password}

home

diff --git a/src/share/index.ts b/src/share/index.ts new file mode 100644 index 0000000..2fb2575 --- /dev/null +++ b/src/share/index.ts @@ -0,0 +1,3 @@ +export default { + data: {} +} diff --git a/types/global.d.ts b/types/global.d.ts index 0af26bb..65c8e28 100644 --- a/types/global.d.ts +++ b/types/global.d.ts @@ -6,3 +6,5 @@ interface IAny{ interface IAction extends IAny{ type: string } + + diff --git a/vite.config.ts b/vite.config.ts index 07a03b8..0749752 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,13 +1,11 @@ - - import { defineConfig } from "vite" import reactRefresh from "@vitejs/plugin-react-refresh" // import WindiCSS from "vite-plugin-windicss" const { resolve, join } = require("path") // import electron from "vitejs-plugin-electron" +import { minifyHtml, injectHtml } from "vite-plugin-html" - -require('dotenv').config({ path: join(__dirname, '.env') }) +console.log(process.env.NO); // https://vitejs.dev/config/ export default defineConfig({ @@ -20,8 +18,8 @@ export default defineConfig({ }, }, }, - server:{ - port: +process.env.PORT + server: { + port: +process.env.PORT, }, build: { outDir: resolve(__dirname, "dist/electron"), @@ -41,5 +39,14 @@ export default defineConfig({ }, }, // electron() - plugins: [reactRefresh(),], + plugins: [ + reactRefresh(), + minifyHtml(), + injectHtml({ + injectData: { + title: "vite-plugin-htmlaa-example", + // injectScript: '', + }, + }), + ], })