UNPKG

@fesjs/fes

Version:

一个好用的前端管理台快速开发框架

229 lines (220 loc) 5.66 kB
// src/cli.ts import { join as join5 } from "path"; import process4 from "process"; import pc from "picocolors"; import { semver, yParser } from "@fesjs/utils"; // package.json var package_default = { name: "@fesjs/fes", type: "module", version: "4.0.1", description: "\u4E00\u4E2A\u597D\u7528\u7684\u524D\u7AEF\u7BA1\u7406\u53F0\u5FEB\u901F\u5F00\u53D1\u6846\u67B6", preferGlobal: true, author: "qlin", license: "MIT", homepage: "https://github.com/WeBankFinTech/fes.js#readme", repository: { type: "git", url: "git+https://github.com/WeBankFinTech/fes.js.git", directory: "packages/fes" }, bugs: { url: "https://github.com/WeBankFinTech/fes.js/issues" }, keywords: [ "\u7BA1\u7406\u7AEF", "fes", "fast", "easy", "strong" ], exports: { import: { node: "./dist/node.js", types: "./types.d.ts", default: "./dist/browser.js" } }, main: "./dist/node.js", typings: "types.d.ts", bin: { fes: "./bin/fes.mjs" }, files: [ "bin", "dist", "types.d.ts" ], engines: { node: ">= 18.0.0" }, scripts: { watch: "tsup --watch", build: "tsup" }, publishConfig: { access: "public" }, dependencies: { "@fesjs/compiler": "^4.0.1", "@fesjs/preset-built-in": "^4.0.1", "@fesjs/utils": "^4.0.1", "fs-extra": "^11.3.1", picocolors: "^1.1.1", "vue-router": "^4.5.1" }, devDependencies: { "@types/fs-extra": "^11.0.4" } }; // src/serviceWithBuiltIn.ts import { join as join2 } from "path"; import process from "process"; import { Service as CoreService } from "@fesjs/compiler"; import { resolve } from "@fesjs/utils"; import { readJSONSync } from "fs-extra/esm"; // src/utils/shared.ts import { dirname, join } from "path"; import { fileURLToPath } from "url"; var OWNER_DIR = join(dirname(fileURLToPath(import.meta.url)), ".."); // src/serviceWithBuiltIn.ts var Service = class extends CoreService { constructor(opts) { const pkg = readJSONSync(join2(OWNER_DIR, "package.json")); process.env.FES_VERSION = pkg.version; process.env.FES_DIR = OWNER_DIR; super({ ...opts, presets: [resolve.sync("@fesjs/preset-built-in", { basedir: OWNER_DIR }), ...opts.presets || []], plugins: [...opts.plugins || []] }); } }; // src/utils/fork.ts import { fork } from "child_process"; import process2 from "process"; var usedPorts = []; var CURRENT_PORT; function start({ scriptPath }) { const execArgv = process2.execArgv.slice(0); const inspectArgvIndex = execArgv.findIndex((argv) => argv.includes("--inspect-brk")); if (inspectArgvIndex > -1) { const inspectArgv = execArgv[inspectArgvIndex]; execArgv.splice( inspectArgvIndex, 1, inspectArgv.replace(/--inspect-brk=(.*)/, (match, s1) => { let port; try { port = Number.parseInt(s1, 10) + 1; } catch { port = 9230; } if (usedPorts.includes(port)) { port += 1; } usedPorts.push(port); return `--inspect-brk=${port}`; }) ); } if (CURRENT_PORT) { process2.env.PORT = CURRENT_PORT.toString(); } const child = fork(scriptPath, process2.argv.slice(2), { execArgv }); child.on("message", (data) => { const type = data && data.type || null; if (type === "RESTART") { child.kill(); start({ scriptPath }); } else if (type === "UPDATE_PORT") { CURRENT_PORT = data.port; } process2.send && process2.send(data); }); return child; } // src/utils/getCwd.ts import { isAbsolute, join as join3 } from "path"; import process3 from "process"; var getCwd_default = () => { const cwd = process3.cwd(); if (process3.env.APP_ROOT) { if (!isAbsolute(process3.env.APP_ROOT)) { return join3(cwd, process3.env.APP_ROOT); } return process3.env.APP_ROOT; } return cwd; }; // src/utils/getPkg.ts import { join as join4 } from "path"; import { readJSONSync as readJSONSync2 } from "fs-extra/esm"; var getPkg_default = (dir) => { try { return readJSONSync2(join4(getCwd_default(), "package.json")); } catch { try { return readJSONSync2(join4(dir, "package.json")); } catch { return void 0; } } }; // src/cli.ts var requiredVersion = package_default.engines.node; function checkNodeVersion(wanted, id) { if (!semver.satisfies(process4.version, wanted, { includePrerelease: true })) { console.log(pc.red(`You are using Node ${process4.version}, but this version of ${id} requires Node ${wanted}. Please upgrade your Node version.`)); process4.exit(1); } } checkNodeVersion(requiredVersion, "@fesjs/fes"); var rawArgv = process4.argv.slice(2); var args = yParser(rawArgv); async function main() { try { const command = args._[0]; if (command === "dev") { const child = start({ scriptPath: join5(OWNER_DIR, "dist", "forkedDev.mjs") }); process4.on("SIGINT", () => { child.kill("SIGINT"); process4.exit(); }); process4.on("SIGTERM", () => { child.kill("SIGTERM"); process4.exit(); }); } else { if (command === "build") { process4.env.NODE_ENV = "production"; } const service = await new Service({ cwd: getCwd_default(), pkg: getPkg_default(process4.cwd()), fesPkg: package_default }); await service.ready; service.run({ args, rawArgv }); } } catch (e) { console.error(pc.red(e.message)); console.error(e.stack); process4.exit(1); } } export { main };