infly-libs
Version:
工具组件库
76 lines (65 loc) • 2.38 kB
JavaScript
const fs = require("fs");
const path = require("path");
const { execSync } = require("child_process");
const { scriptWrite } = require("./file-process.js");
const { previewList } = require("../script/dataInit.js");
const projectRoot = process.cwd().replace(/\\node_modules.*$/g, "");
const projectPkgPath = path.resolve(projectRoot, "package.json");
const projectVueConfigPath = path.resolve(projectRoot, "vue.config.js");
const projectConfig = fs.existsSync(projectVueConfigPath) ? require(projectVueConfigPath) : {};
const rawArgv = process.argv.slice(2);
const args = rawArgv.join(" ");
const DEFAULT_CONFIG = {
port: 9001,
publicPath: "/",
outputDir: "dist"
};
function scriptInit() {
if (fs.existsSync(projectVueConfigPath)) {
return;
}
scriptWrite(projectPkgPath, previewList);
}
function init(skipBuild = false) {
try {
const { connect } = require("../lib/server/connect");
const { serveStatic } = require("../lib/server/serve-static");
const app = connect();
const noBuild = skipBuild || rawArgv.includes("--no-build");
const { devServer } = projectConfig || {};
const { port: devServerPort } = devServer || {};
projectConfig.port = devServerPort || DEFAULT_CONFIG.port;
const { publicPath, outputDir, port } = {
...DEFAULT_CONFIG,
...projectConfig
};
const listenPort = port - 1000;
if (!noBuild) {
buildProject();
}
app.use(
publicPath,
serveStatic(outputDir, {
index: ["index.html", "/"]
})
);
app.listen(listenPort, function () {
console.log(global.logColor.success, `🚀 项目构建预览,CTRL + C结束:`);
console.log(global.logColor.link, `http://localhost:${listenPort}${publicPath}`);
});
} catch (error) {
console.log(global.logColor.error, `❌ 预览项目失败:${error.message}`);
}
}
function buildProject() {
try {
execSync(`vue-cli-service build ${args}`, { stdio: "inherit" });
} catch (err) {
console.error(global.logColor.error, "❌ 构建失败:", err.message);
process.exit(1);
}
}
module.exports = {
init,
scriptInit
};