in modules/code-generator/scripts/build-template-static-files.js [30:125]
function buildTemplateStaticFiles({ sourceDir, outputDir }) {
console.log('processing %s template...', path.dirname(sourceDir));
// 扫描所有的目录
const sourceFiles = glob.sync('**/*', {
nodir: true,
dot: true,
cwd: sourceDir,
});
console.log('got %d files: %o', sourceFiles.length, sourceFiles);
const staticFiles = {
imports: [],
runs: [],
};
// 生成对应的文件
sourceFiles.forEach((sourceFileName, index) => {
console.log('processing %s', sourceFileName);
const sourceFileContent = fs.readFileSync(path.join(sourceDir, sourceFileName), 'utf-8');
const sourceFileRealName = sourceFileName.replace(/\.template$/, '');
const outputFileName = `${sourceFileRealName}.ts`;
const outputFileFullPath = path.join(outputDir, 'files', outputFileName);
const sourceFileExtName = path.extname(sourceFileRealName);
const sourceFileBaseName = path.basename(sourceFileRealName, sourceFileExtName);
// 确保目录存在
fs.mkdirSync(path.dirname(outputFileFullPath), { recursive: true });
// 写入文件
fs.writeFileSync(
outputFileFullPath,
[
`/* eslint-disable max-len */`,
`/* Note: this file is generated by "npm run template", please dont modify this file directly */`,
`/* -- instead, you should modify "${path.relative(
PROJECT_ROOT,
path.join(sourceDir, sourceFileName),
)}" and run "npm run template" */`,
`import { ResultFile } from '@alilc/lowcode-types';`,
'',
`export default function getFile(): [string[], ResultFile] {`,
` return ${JSON5.stringify([
// 文件目录:
path.dirname(sourceFileRealName).split(path.sep).filter(Boolean),
// 文件名和内容:
{
name: sourceFileBaseName,
ext: sourceFileExtName.replace(/^\./, ''),
content: sourceFileContent,
},
])};`,
`}`,
'',
].join('\n'),
{
encoding: 'utf-8',
},
);
staticFiles.imports.push(`import file${index} from './files/${sourceFileRealName}';`);
staticFiles.runs.push(` runFileGenerator(root, file${index})`);
});
console.log('generating static-files.ts...');
fs.writeFileSync(
path.join(outputDir, 'static-files.ts'),
[
`/* Note: this file is generated by "npm run template", please dont modify this file directly */`,
`import { ResultDir } from '@alilc/lowcode-types';
import { createResultDir } from '../../../../../utils/resultHelper';
import { runFileGenerator } from '../../../../../utils/templateHelper';`,
...staticFiles.imports,
'',
`export function generateStaticFiles(root = createResultDir('.')): ResultDir {`,
...staticFiles.runs,
` return root;`,
`}`,
'',
].join('\n'),
{ encoding: 'utf-8' },
);
// prettier 一把
console.log('run prettier...');
spawnSync('npx', ['prettier', '--write', `${outputDir}`], {
stdio: 'inherit',
shell: true,
});
console.log('done %s', path.basename(sourceDir));
}