feat(cli): 支持tmagic.config.local配置文件,会与tmagic.config配置合并,可用于本地开发时的临时配置

This commit is contained in:
roymondchen 2025-08-27 16:19:43 +08:00
parent 0643699fac
commit 9f350541bf
4 changed files with 54 additions and 13 deletions

View File

@ -30,6 +30,7 @@
"chokidar": "^3.6.0",
"esbuild": "^0.21.5",
"fs-extra": "^11.2.0",
"merge-options": "^3.0.4",
"picocolors": "^1.1.1",
"recast": "^0.23.11",
"tslib": "^2.8.0"

View File

@ -1,6 +1,8 @@
import path from 'node:path';
import fs from 'fs-extra';
// @ts-ignore
import mergeOptions from 'merge-options';
import App from '../Core';
import { UserConfig } from '../types';
@ -22,18 +24,29 @@ export const scripts = (defaultAppConfig: UserConfig) => {
path.resolve(defaultAppConfig.temp, 'config.cjs'),
].find((item) => fs.pathExistsSync(item));
const { npmConfig = {}, ...userConfig } = await loadUserConfig(userConfigPath);
const localUserConfigPath = [
path.resolve(defaultAppConfig.source, 'tmagic.config.local.ts'),
path.resolve(defaultAppConfig.source, 'tmagic.config.local.js'),
path.resolve(defaultAppConfig.source, 'tmagic.config.local.cjs'),
path.resolve(defaultAppConfig.temp, 'config.local.ts'),
path.resolve(defaultAppConfig.temp, 'config.local.js'),
path.resolve(defaultAppConfig.temp, 'config.local.cjs'),
].find((item) => fs.pathExistsSync(item));
let userConfig = await loadUserConfig(userConfigPath);
if (localUserConfigPath) {
const localUserConfig = await loadUserConfig(localUserConfigPath);
if (localUserConfig.packages?.length) {
localUserConfig.packages = [...(userConfig.packages || []), ...localUserConfig.packages];
}
userConfig = mergeOptions(userConfig, localUserConfig);
}
// resolve the final app config to use
const appConfig = {
...defaultAppConfig,
...userConfig,
npmConfig: {
...(defaultAppConfig.npmConfig || {}),
...npmConfig,
},
};
const appConfig = mergeOptions(defaultAppConfig, userConfig);
const app = new App(appConfig);
// clean temp and cache

View File

@ -601,10 +601,20 @@ const flattenPackagesConfig = (packages: (string | Record<string, string>)[]) =>
const packagesConfig: ([string] | [string, string])[] = [];
packages.forEach((item) => {
if (typeof item === 'object') {
Object.entries(item).forEach(([key, packagePath]) => {
packagesConfig.push([packagePath, key]);
});
for (const [key, packagePath] of Object.entries(item)) {
const index = packagesConfig.findIndex(([, k]) => {
return k === key;
});
if (index > -1) {
packagesConfig[index] = [packagePath, key];
} else {
packagesConfig.push([packagePath, key]);
}
}
} else if (typeof item === 'string') {
if (packagesConfig.find(([k]) => k === item)) {
return;
}
packagesConfig.push([item]);
}
});

17
pnpm-lock.yaml generated
View File

@ -191,6 +191,9 @@ importers:
fs-extra:
specifier: ^11.2.0
version: 11.3.0
merge-options:
specifier: ^3.0.4
version: 3.0.4
picocolors:
specifier: ^1.1.1
version: 1.1.1
@ -5196,6 +5199,10 @@ packages:
resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
engines: {node: '>=8'}
is-plain-obj@2.1.0:
resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
engines: {node: '>=8'}
is-potential-custom-element-name@1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
@ -5509,6 +5516,10 @@ packages:
resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
engines: {node: '>=18'}
merge-options@3.0.4:
resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==}
engines: {node: '>=10'}
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@ -11509,6 +11520,8 @@ snapshots:
is-obj@2.0.0: {}
is-plain-obj@2.1.0: {}
is-potential-custom-element-name@1.0.1: {}
is-reference@3.0.3:
@ -11842,6 +11855,10 @@ snapshots:
meow@13.2.0: {}
merge-options@3.0.4:
dependencies:
is-plain-obj: 2.1.0
merge-stream@2.0.0: {}
merge2@1.4.1: {}