@fesjs/fes
Version:
一个好用的前端管理台快速开发框架
229 lines (220 loc) • 5.66 kB
JavaScript
// 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
};