加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
extract-meta 1.83 KB
一键复制 编辑 原始数据 按行查看 历史
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const reactDocs = require('react-docgen');
const componentPaths = process.argv.slice(2);
if (!componentPaths.length) {
help();
process.exit(1);
}
const metadata = Object.create(null);
componentPaths.forEach(componentPath =>
collectMetadataRecursively(componentPath)
);
writeOut(metadata);
function help() {
console.error('usage: ');
console.error(
'extract-meta path/to/component(s) ' +
' [path/to/more/component(s), ...] > metadata.json'
);
}
function writeError(msg, filePath) {
if (filePath) {
process.stderr.write(`Error with path ${filePath}`);
}
process.stderr.write(msg + '\n');
if (msg instanceof Error) {
process.stderr.write(msg.stack + '\n');
}
}
function parseFile(filepath) {
const urlpath = filepath.split(path.sep).join('/');
let src;
if (!['.jsx', '.js'].includes(path.extname(filepath))) {
return;
}
try {
src = fs.readFileSync(filepath);
metadata[urlpath] = reactDocs.parse(src);
} catch (error) {
writeError(error, filepath);
}
}
function collectMetadataRecursively(componentPath) {
if (fs.lstatSync(componentPath).isDirectory()) {
let dirs;
try {
dirs = fs.readdirSync(componentPath);
} catch (error) {
writeError(error, componentPath);
}
dirs.forEach(filename => {
const filepath = path.join(componentPath, filename);
if (fs.lstatSync(filepath).isDirectory()) {
collectMetadataRecursively(filepath);
} else {
parseFile(filepath);
}
});
} else {
parseFile(componentPath);
}
}
function writeOut(result) {
console.log(JSON.stringify(result, '\t', 2));
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化