Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: 🧩 文件树转换扩展名优化且添加注释 #304

Open
wants to merge 10 commits into
base: feat/generator-upgrade
Choose a base branch
from
2 changes: 1 addition & 1 deletion packages/@plugin/plugin-husky/generator/index.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const basicConfig = (pkgManager) => {
"@commitlint/cli": "^18.4.3",
"@commitlint/config-conventional": "^18.4.3",
},
}
};
};

const generateBasicConfig = (generatorAPI, pkgManager) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
extends: ["@commitlint/config-conventional"],
};
28 changes: 14 additions & 14 deletions packages/@plugin/plugin-mobx/generator/index.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -23,34 +23,34 @@ module.exports = (generatorAPI) => {
{
name: "store",
from: "./store",
}
]
}
},
],
},
],
astOptions: {
parserOptions: { sourceType: "module", plugins: ["typescript", "jsx"] }
}
parserOptions: { sourceType: "module", plugins: ["typescript", "jsx"] },
},
},
},
[pluginToTemplateProtocol.UPDATE_EXPORT_CONTENT_PROTOCOL]: {
params: {
url: 'src/App',
exportContent: 'observer',
url: "src/App",
exportContent: "observer",
astOptions: {
parserOptions: { sourceType: "module", plugins: ["typescript", "jsx"] }
}
parserOptions: { sourceType: "module", plugins: ["typescript", "jsx"] },
},
},
},
[pluginToTemplateProtocol.SLOT_CONTENT_PROTOCOL]: {
params: {
slotConfig: [
{
url: 'src/App',
slotName: 'store-slot',
url: "src/App",
slotName: "store-slot",
slotContent: "console.log('当前store的number值为: ', store.number);", // 提示用户store的number值生效
}
]
},
],
},
}
},
});
};
18 changes: 9 additions & 9 deletions packages/@plugin/plugin-pinia/generator/index.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,25 @@ module.exports = (generatorAPI) => {
{
name: "pinia",
from: "./store",
}
]
},
],
},
],
astOptions: {
parserOptions: { sourceType: "module", plugins: ["typescript"] }
}
parserOptions: { sourceType: "module", plugins: ["typescript"] },
},
},
},
[pluginToTemplateProtocol.SLOT_CONTENT_PROTOCOL]: {
params: {
slotConfig: [
{
url: 'src/main',
slotName: 'use-pinia-slot',
url: "src/main",
slotName: "use-pinia-slot",
slotContent: "app.use(pinia);",
}
]
},
],
},
}
},
});
};
20 changes: 10 additions & 10 deletions packages/@plugin/plugin-react-router/generator/index.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,29 @@ module.exports = (generatorAPI) => {
{
name: "{ BrowserRouter as Router, Switch, Route }",
from: "react-router-dom",
}
]
},
],
},
],
astOptions: {
parserOptions: { sourceType: "module", plugins: ["typescript", "jsx"] }
}
parserOptions: { sourceType: "module", plugins: ["typescript", "jsx"] },
},
},
},
[pluginToTemplateProtocol.SLOT_CONTENT_PROTOCOL]: {
params: {
slotConfig: [
{
url: 'src/App',
slotName: 'router-start-slot',
url: "src/App",
slotName: "router-start-slot",
slotContent: "<Router>",
},
{
url: 'src/App',
slotName: 'router-end-slot',
url: "src/App",
slotName: "router-end-slot",
slotContent: "</Router>",
}
]
},
],
},
},
});
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/models/BaseAPI.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import fs from "fs";
import path from "path";

const Protocols = require("../configs/protocol");
import { Preset } from "../utils/preset";

import Generator from "./Generator";
import PluginToTemplateAPI from "./protocolGenerator/PluginToTemplateAPI";
import TemplateToBuildToolAPI from "./protocolGenerator/TemplateToBuildToolAPI";
import FileTree from "./FileTree";

const Protocols = require("../configs/protocol");

const { pluginToTemplateProtocol, pluginToBuildToolProtocol, templateToBuildToolProtocol } =
Protocols;

Expand Down
43 changes: 35 additions & 8 deletions packages/core/src/models/FileTree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import fs from "fs-extra";
import ejs from "ejs";

import { createFiles } from "../utils/createFiles";
import { templateFileExtension } from "../utils/constants";
import formatCode from "../utils/formatCode";

import PluginToTemplateAPI from "./protocolGenerator/PluginToTemplateAPI";
Expand Down Expand Up @@ -99,15 +100,36 @@ class FileTree {
} else {
const fileContent = fs.readFileSync(src, "utf8");
file.type = "file";
// 在选择ts后,拉取插件template文件中如若有js/jsx则需要转换为ts/tsx
const transformResult =
process.env.isTs === "true"
? this.transformFileExtension(fileContent, path.extname(src).slice(1))
: { fileExtension: path.extname(src).slice(1), fileContent: fileContent };

file.describe = {
fileName: path.basename(src).split(".")[0],
fileExtension: path.extname(src).slice(1),
fileContent,
...transformResult,
};
}
return file;
}

/**
* 处理文件扩展名,可增加js->ts,jsx->tsx文件内容fileContent转换代码
* @param fileContent 文件内容
* @param fileName 文件名称
* @param fileExtension 文件扩展名
* @returns 处理后的文件扩展名和文件内容
*/
private transformFileExtension(fileContent: string, fileExtension: string) {
const result = { fileExtension, fileContent };

if (Object.keys(templateFileExtension).includes(fileExtension)) {
result.fileExtension = templateFileExtension[fileExtension];
}
return result;
}

/**
* 通过ejs模板构建文件数据
* @param src 源文件路径
Expand Down Expand Up @@ -136,16 +158,21 @@ class FileTree {
file.children?.push(subTree);
}
} else {
let fileContent = fs.readFileSync(src, "utf8");
// EJS 渲染
fileContent = ejs.render(fileContent, options);
const fileContent = fs.readFileSync(src, "utf8");

file.type = "file";
// 转换文件后缀js -> ts,.jsx -> .tsx
const transformResult =
process.env.isTs === "true"
? this.transformFileExtension(fileContent, path.extname(src).slice(1))
: { fileExtension: path.extname(src).slice(1), fileContent: fileContent };

// EJS 渲染
file.describe = {
fileName: path.basename(src).split(".")[0],
fileExtension: path.extname(src).slice(1),
fileContent,
fileExtension: transformResult.fileExtension,
fileContent: ejs.render(transformResult.fileContent, options),
};

file.path = path.resolve(
parentDir,
`${file.describe.fileName}.${file.describe.fileExtension}`,
Expand Down
9 changes: 9 additions & 0 deletions packages/core/src/utils/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,15 @@ export const buildToolScripts = {
},
};

/**
* 用于处理文件树扩展名修改
* 例如:js -> ts,jsx -> tsx
*/
export const templateFileExtension = {
js: "ts",
jsx: "tsx",
};

function detectOS() {
const platform = process.platform;
if (platform === "win32") {
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/utils/createApp.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const { resolveApp } = require("@laconic/utils");
import fs from "fs-extra";
import { exec } from "child_process";
import { confirm } from "@clack/prompts";
Expand All @@ -18,6 +17,8 @@ import dependenciesInstall from "./dependenciesInstall";
import { createReadmeString } from "./createFiles";
import { buildToolConfigDevDependencies, buildToolScripts } from "./constants";

const { resolveApp } = require("@laconic/utils");

/**
* 将输入模式设置为原始模式。
*/
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/utils/fileController.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const { resolveApp } = require("@laconic/utils");
import chalk from "chalk";
import ora from "ora";
import fs, { readFileSync } from "fs-extra";
Expand All @@ -7,6 +6,8 @@ import { rmSync } from "node:fs";

import { CLIENT_OS } from "./constants";

const { resolveApp } = require("@laconic/utils");

/**
* @author moment
* @param directoryPath 删除文件的路径,默认 node_modules
Expand Down
15 changes: 13 additions & 2 deletions packages/core/src/utils/getnpmSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,19 @@ export const getNpmSource = () => {
// 使用 Promise.race 找出哪个源最快,并用 await 等待结果
const fastestSource: Source = await Promise.race(promises);

// 将最快源的 registry 添加到 npmSources 中
npmSources.push({ label: "Fastest source", value: fastestSource.sourceName.registry });
// 找到最快源对应的名称
const fastestName =
Object.keys(npmRegistries).find(
(name) => npmRegistries[name].registry === fastestSource.sourceName.registry,
) || "";

// 将最快源添加到数组开头
if (fastestName) {
npmSources.unshift({
label: `Fastest source (${fastestName})`,
value: fastestSource.sourceName.registry,
});
}
} catch (error) {
console.error("检测源速度时发生错误:", error);
}
Expand Down
Loading
Loading